2011-09-26 23 views
5

मैं अपने संग्रह में एक रिकॉर्ड है और मैं व्यक्ति जिसका आईडी है 1. लेकिन मैं विवरण 2times के लिए बजाय हो रही है की 1.mongodb में मिलान किए गए रिकॉर्ड को कैसे खोजें?

db.mycollection.insert({"person" : [ { "id":1, "details" : { "name" : "Aswini", "Age" : 10 }}, { "id":2, "details" : { "name" : "Mahesh", "Age" : 11}}]}) 

का ब्यौरा लाने के लिए चाहते हैं तो फिर चल

> db.mycollection.findOne({"person.id":1},{"person.details":1,"_id":0}) 

परिणाम है:

{ 
     "person" : 
       [ 
        { 
         "details" : 
         { 
         "name" : "Aswini", 
         "Age" : 10 
         } 
        }, 
        { 
         "details" : 
         { 
         "name" : "Mahesh", 
         "Age" : 11 
         } 
        } 
       ] 
    } 

लेकिन मैं इस प्रकार की जरूरत है:

{ 
    "person" : [ 
       { 
       "details" : { 
          "name" : "Aswini", 
          "Age" : 10 
         } 
       } 
      ] 
    } 

समझ में नहीं आता कि गलती कहां कर रही है। कृपया अपनी मदद की ज़रूरत है। मैं MongoDB का उपयोग कर रहा हूं, जावा

उत्तर

0

person एक सरणी है। आप $slice

db.mycollection.findOne({"person.id":1},{"person":{$slice:[0,1]},"_id":0}) 
+0

अपनी गलत तरह हो सकता है। ओप 1 सेंट तत्व नहीं चाहता है, वह स्थिति के बावजूद मिलान करने वाले उप सरणी को पुनर्प्राप्त करना चाहता है। यदि person.id उप दस्तावेज़ क्वेरी के ऊपर अंतिम स्थिति में है – RameshVel

+0

woek नहीं होगा आप बिल्कुल सही हैं। मैं उप इंडेक्स को इसके सूचकांक के बावजूद चाहता हूं। अगर आपके पास mongodb के लिए कोई नया समाधान है तो कृपया मदद करें – aswininayak

3

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

आमतौर पर positional operator $updates में उप दस्तावेज़ों से मेल खाने के लिए उपयोग किया जाता था। लेकिन फीचर विनिर्देशकों में अभी तक लागू नहीं किया गया है।

पहले से ही मोंगो Support for positional ($) operator in fields to return specifier में एक उत्कृष्ट समस्या है। (वोट करने के लिए लॉग इन करें यदि आप वास्तव में सुविधा आवश्यक)

तो आप अपने स्कीमा इस संभाल करने redesgin करने के लिए है, इस

db.test.insert({"person" : [ { "id":1, "details" : { "name" : "Aswini", "Age" : 10 }}]}) 
db.test.insert({"person" : [ { "id":2, "details" : { "name" : "Mahesh", "Age" : 11}}]}) 

db.test.find({"person.id":1},{'person.details':1}) 
संबंधित मुद्दे