2012-03-14 18 views
6

के साथ नेस्टेड फ़ील्ड पर क्वेरी मैं यह समझने की कोशिश कर रहा हूं कि मुझे प्रश्नों को कैसे व्यवस्थित करना चाहिए ताकि वे मेरी अनुक्रमणिका को प्रभावित कर सकें।MongoDB - सूचकांक

{ "attributes" : { "make" : "Subaru", "color" : "Red" } } 

के एक सूचकांक के साथ: मैं दस्तावेजों इसलिए की तरह संरचित है db.stuff.ensureIndex({"attributes.make":1})

मैं क्या पाया है कि डॉट नोटेशन का उपयोग कर क्वेरी करने सूचकांक हिट होने पर दस्तावेज़ के द्वारा क्वेरी नहीं करता है।

उदाहरण:

db.stuff.find({"attributes.make":"Subaru"}).explain() 
{ 
"cursor" : "BtreeCursor attributes.make_1", 
"nscanned" : 2, 
"nscannedObjects" : 2, 
"n" : 2, 
"millis" : 0, 
"nYields" : 0, 
"nChunkSkips" : 0, 
"isMultiKey" : false, 
"indexOnly" : false, 
"indexBounds" : { 
    "attributes.make" : [ 
     [ 
      "Subaru", 
      "Subaru" 
     ] 
    ] 
} 
} 

बनाम

db.stuff.find({attributes:{make:"Subaru"}}).explain() 
{ 
"cursor" : "BasicCursor", 
"nscanned" : 2, 
"nscannedObjects" : 2, 
"n" : 0, 
"millis" : 1, 
"nYields" : 0, 
"nChunkSkips" : 0, 
"isMultiKey" : false, 
"indexOnly" : false, 
"indexBounds" : { 

} 
} 

वहाँ एक रास्ता सूचकांक हिट करने के लिए दस्तावेज़ शैली क्वेरी प्राप्त करने के लिए है? इसका कारण यह है कि जब मेरी लगातार वस्तुओं से प्रश्नों का निर्माण होता है तो डॉट नोटेशन का उपयोग करके कुछ के विपरीत दस्तावेजों के रूप में उन्हें क्रमबद्ध करना बहुत आसान होता है।

मैं यह भी जोड़ूंगा कि हम एक घर उगाए गए डेटा मैपर परत का निर्माण कर रहे हैं w/जैक्सन। मॉर्फिया जैसे कुछ का उपयोग इन प्रश्नों को सही तरीके से बनाने में मदद करेगा?

उत्तर

7

क्या कुछ और खुदाई और this thread बताता है कि सब-दस्तावेज़ क्वेरी के साथ क्या चल रहा है। उपरोक्त मेरी समस्या यह थी कि सब-दस्तावेज़ आधारित क्वेरी एक्ट जैसे डॉट-नोटेशन को मुझे elemMatch का उपयोग करने की आवश्यकता होती है।

db.stuff.find({"attributes":{"$elemMatch" : {"make":"Subaru"}}}).explain() 
{ 
"cursor" : "BtreeCursor attributes.make_1", 
"nscanned" : 2, 
"nscannedObjects" : 2, 
"n" : 0, 
"millis" : 2, 
"nYields" : 0, 
"nChunkSkips" : 0, 
"isMultiKey" : false, 
"indexOnly" : false, 
"indexBounds" : { 
    "attributes.make" : [ 
     [ 
      "Subaru", 
      "Subaru" 
     ] 
    ] 
} 
}