जब तक आपको पता चलता है कि आप ObjectId पर मेल खा रहे हैं और वास्तव में संदर्भित संग्रह में कुछ भी नहीं है, आप $इन
ऑपरेटर:
db.collection.find({ "members": { "$in": [ "some id 1", "some id 2" ] } })
बेशक वे आपके वास्तविक ObjectId मान कहां हैं।
लेकिन अगर आप वास्तव में उस दस्तावेज़ से मतलब रखते हैं जिसमें बिल्कुल वह सरणी है, तो आप बस सरणी में पास हो जाते हैं:
db.collection.find({ "members": [ "some id 1", "some id 2" ] })
और अगर इसमें दोनों तत्व होने चाहिए लेकिन अन्य हो सकते हैं तो वर्तमान में आपको एक $और
अभिव्यक्ति:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
]})
लेकिन रिलीज 2.6 से आप का ठीक से उपयोग कर सकते हैं $सभी
प्रभावी ढंग से ऐसा करने के लिए ऑपरेटर:
db.collection.find({ "members": { "$all": [ "some id 1", "some id 2" ] } })
दूसरा रूप केवल उन दो तत्वों से मेल खा रहा है, लेकिन किसी भी क्रम में। तो इसके दो तरीके हैं:
db.collection.find({ "$or": [
{ "members": [ "some id 1", "some id 2" ] },
{ "members": [ "some id 2", "some id 1" ] }
]})
यह एक तार्किक $or
का उपयोग करता है
यह कहने के लिए कि सरणी सटीक होनी चाहिए लेकिन किसी भी तरह से व्यवस्थित की जा सकती है। और दूसरा तरीका:
db.collection.find({ "$and": [
{ "members": "some id 1" },
{ "members": "some id 2" }
{ "members": { "$size": 2 } }
]})
तो यह $size
का उपयोग करेगा
यह सुनिश्चित करने के लिए कि जब सरणी में मेल खाने वाले दोनों तत्व होते हैं तो वह भी केवल दो होता है तत्व $or<का उपयोग करने से बेहतर सिंटैक्स कौन सा है? /कोड>
, विशेष रूप से बड़े सरणियों के लिए।
और जैसा कि उल्लेख किया गया है, भविष्य के रिलीज में यह और भी साफ हो जाता है:
db.collection.find({ "$and": [
{ "members": { "$all": [ "some id 1", "some id 2" ] } },
{ "members": { "$size": 2 } }
]})
यह काफी हद तक हर व्याख्या को शामिल करता है