कुछ प्रश्नों को चलाने के बाद, मैं इस निष्कर्ष पर पहुंचा कि $in सरणियों की एक सरणी के लिए काम नहीं करता है ।
आप $elemMatch
. का उपयोग कर सकते हैं इसके बजाय और यह काम करेगा, लेकिन यह निराशाजनक है कि MongoDB के दस्तावेज़ इसके बारे में चेतावनी नहीं देते हैं।
मैंने यह दस्तावेज़ बनाया है:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
ध्यान दें कि फ़ील्ड "आइटम" स्ट्रिंग्स की एक सरणी है और यह क्वेरी पूरी तरह से काम करती है:
db.nested.findOne({"items":{"$in":["item20"]} })
अब, "स्तर 1.0" भी तारों की एक सरणी है, केवल अंतर यह है कि यह किसी अन्य सरणी के अंदर है। यह प्रश्न काम करना चाहिए लेकिन नहीं है:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
परिणाम प्राप्त करने का एकमात्र तरीका $elemMatch का उपयोग करना है:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
तो $elemMatch
समस्या को हल करता है, लेकिन वास्तविक समाधान यह है कि मोंगोडीबी के दस्तावेज़ों को यह बताने के लिए अद्यतन किया जाए कि $in
सरणियों के सरणियों के लिए काम नहीं करता है। शायद आपको 10gen को एक अनुरोध सबमिट करना चाहिए।