2011-04-20 12 views
12
> db.test.insert({"a" : { "b" : { "c" : { "d1" : [ "e1" ], 
              "d2" : [ "e2" ], 
              "d3" : [ "e3", "e4" ], 
              "d4" : [ "e5", "e6" ] } } } }) 
> db.test.find({'a.b.c' : {$exists : true}}) 
{ "_id" : ObjectId("4daf2ccd697ebaacb10976ec"), "a" : { "b" : { "c" : { "d1" : [ "e1" ], "d2" : [ "e2" ], "d3" : [ "e3", "e4" ], "d4" : [ "e5", "e6" ] } } } } 

में लेकिन इन में से कोई भी काम:

> db.test.find({'a.b': "c"}) 
> db.test.find({'a.b': {$elemMatch : {"c" : {$exists: true}}}}) 
> db.test.find({'a.b': {$elemMatch : {$elemMatch : {$all : ["e1"] }}}}) 

मान लीजिए मैं नहीं जानता कि क्या c और d1 ... d4 के मूल्यों कर रहे हैं। क्या विशेष मूल्यों के लिए नेस्टेड-ऑब्जेक्ट्स संरचना को खोजने का एक सामान्य तरीका है?

मैंने सोचा कि $elemMatch क्या था।

धन्यवाद।

+0

$ elemMatch देखें [प्रलेखन] (http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24elemMatch)। –

उत्तर

6

मैंने सोचा कि क्या $ elemMatch के लिए ...

the docs से था: $ elemMatch क्वेरी ऑपरेटर का उपयोग करके आप एक सरणी में किसी संपूर्ण दस्तावेज़ से मेल कर सकते हैं।

ऐसा लगता है कि आप क्या देख रहे हैं।

क्या विशिष्ट मूल्यों के लिए नेस्टेड-ऑब्जेक्ट्स संरचना को खोजने का एक सामान्य तरीका है?

ऐसा लगता है जैसे आप " 'E1' का एक उदाहरण के लिए सब कुछ वस्तु में 'सी'" खोज करने के लिए चाहते हैं।

मोंगोडीबी दो संबंधित विशेषताओं का समर्थन करता है, लेकिन जो सुविधाएं आप खोज रहे हैं वह विशेषताएं नहीं हैं। वस्तुओं, डॉट नोटेशन में

  • रीच: `db.test.find ({ 'abcd4':: 'E5'})

यह db.test.find({'a.b.c.d1' : 'e1'})

  • सरणियों के माध्यम से पढ़ें लगता है जैसे आप एक ही समय में दोनों करने की क्षमता की तलाश में हैं। आप एक ही प्रश्न में "वस्तुओं में पहुंचना" और "सरणी के माध्यम से पढ़ना" चाहते हैं।

    दुर्भाग्यवश, मुझे ऐसी सुविधा नहीं पता है। इसके लिए आप file a feature request चाह सकते हैं।

  • +1

    धन्यवाद, मैंने किया [सुविधा का अनुरोध करें] (https://jira.mongodb.org/browse/SERVER-2989)। – trope

    +1

    दस्तावेज़ों के आपके लिंक के लिए एक लॉगिन की आवश्यकता है। – Ixx

    2

    ट्रोप, क्या आपको कभी अपने प्रश्न का उत्तर मिला?

    मेरा मानना ​​है कि क्वेरी आप देख रहे हैं

    db.test.find({ 'a.b.c': { '$exists': true } }); 
    

    आपके क्रेडिट करने के लिए है, तो आप बहुत करीब थे!

    वैसे भी, उम्मीद है कि इससे मदद मिलती है!

    +0

    हां, यह क्वेरी काम करती है, लेकिन जब आप नहीं जानते कि इंटरमीडिएट कुंजी (इस मामले में 'बी') क्या है, तो मैं नेस्टेड ऑब्जेक्ट की कुंजी या मान से खोज करने का एक तरीका ढूंढ रहा हूं। – trope

    +1

    मैंने [एक सुविधा अनुरोध दायर किया] [https://jira.mongodb.org/browse/SERVER-2989), तो उम्मीद है कि यह जल्द ही उपलब्ध होगा। – trope

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