Selama Anda menyadari bahwa Anda cocok dengan ObjectId dan sebenarnya bukan apa pun dalam koleksi yang direferensikan, Anda dapat menggunakan $in
operator:
db.collection.find({ "members": { "$in": [ "some id 1", "some id 2" ] } })
Di mana tentu saja itu adalah nilai ObjectId Anda yang sebenarnya.
Tetapi jika Anda benar-benar bermaksud dokumen yang memiliki array itu, maka Anda cukup memasukkan array:
db.collection.find({ "members": [ "some id 1", "some id 2" ] })
Dan jika harus memiliki kedua elemen tetapi bisa memiliki yang lain maka saat ini Anda perlu menggunakan $and
ekspresi:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
]})
Tetapi dari rilis 2.6 dan seterusnya Anda dapat menggunakan dengan benar. $all
operator untuk melakukan hal yang sama secara efektif:
db.collection.find({ "members": { "$all": [ "some id 1", "some id 2" ] } })
Bentuk lainnya hanya mencocokkan dua elemen itu, tetapi dalam urutan apa pun. Jadi ada dua pendekatan:
db.collection.find({ "$or": [
{ "members": [ "some id 1", "some id 2" ] },
{ "members": [ "some id 2", "some id 1" ] }
]})
Ini menggunakan logika $or
untuk mengatakan bahwa array harus tepat tetapi dapat diatur dengan cara apa pun. Dan pendekatan lainnya:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
{ "members": { "$size": 2 } }
]})
Jadi ini akan menggunakan $size
untuk memastikan bahwa ketika array berisi kedua elemen yang cocok itu juga hanya memiliki dua elemen. Yang merupakan sintaks yang lebih bagus daripada menggunakan $or
, terutama untuk array yang lebih besar.
Dan di rilis mendatang seperti yang disebutkan, ini menjadi lebih bersih:
db.collection.find({ "$and": [
{ "members": { "$all": [ "some id 1", "some id 2" ] } },
{ "members": { "$size": 2 } }
]})
Itu cukup banyak mencakup setiap interpretasi