2011-11-16 21 views
66

यदि मेरे पास ऐसा रिकॉर्ड है;mongodb एकाधिक सरणी वस्तुओं द्वारा खोजें

{ 
    "text": "text goes here", 
    "words": ["text", "goes", "here"] 
} 

मैं MongoDB में उससे कई शब्दों से कैसे मिलान कर सकता हूं? एक शब्द से मेल खाने पर मैं यह कर सकता हूं;

db.find({ words: "text" }) 

लेकिन जब मैं इसे कई शब्दों के लिए कोशिश करता हूं, तो यह काम नहीं करता है;

db.find({ words: ["text", "here"] }) 

मेरा अनुमान है कि कि एक सरणी का उपयोग करके, यह बजाय व्यक्तिगत सामग्री से मेल खाते से, रिकॉर्ड में एक के खिलाफ पूरे सरणी मैच के लिए कोशिश करता है।

db.things.find({ words: { $all: ["text", "here"] }}); 

या उनमें से या तो (text या here) $in का उपयोग कर:

उत्तर

112

कि क्या आप दस्तावेजों को खोजने के लिए जहां words$all का उपयोग कर दोनों तत्वों (text और here) शामिल हैं कोशिश कर रहे हैं पर निर्भर करता है

db.things.find({ words: { $in: ["text", "here"] }}); 
+3

$ वह सब जो मैं खोज रहा था, धन्यवाद। :) –

+3

यह मैं भी मदद की, मैं इसे एक सरणी में एक वस्तु आईडी को खोजने के लिए की जरूरत है, और जहां में $ की तरह कुछ: [ObjectId ("4f9f2c336b810d0cf0000017")] में विफल रहा है, $: [ "4f9f2c336b810d0cf0000017"] काम किया – jbnunn

+0

आप भी कर सकते हैं मैंगोडब समर्थन पृष्ठ में ऐसा करने का एक और तरीका ढूंढें http://docs.mongodb.org/manual/core/indexes/#indexes-on-sub- दस्तावेज़ और http://docs.mongodb.org/manual/core/indexes/# multikey-अनुक्रमित –

संबंधित मुद्दे