MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB elemMatch अपेक्षित कार्य नहीं करता है

$elemMatch . के व्यवहार में कुछ भी गलत नहीं है . यह अपेक्षा के अनुरूप काम करता है। डॉक्टर यह भी कहते हैं:

जब भी आप एक array project प्रोजेक्ट करते हैं, तो एक सामान्य नियम के रूप में $elemMatch . का उपयोग करके , केवल एक तत्वों का अनुमान लगाया जाएगा अधिकतम . यदि सरणी में कोई भी तत्व मेल नहीं खाता है, तो फ़ील्ड को बिल्कुल भी प्रक्षेपित नहीं किया जाएगा।

तो आपको जो परिणाम मिलता है वह सही है, सरणी में केवल पहला आइटम जो $elemMatch की स्थिति से मेल खाता है projectedहोगा .

{
    "_id" : ObjectId("5439a2992ea8cc0f70feef2d"),
    "Statuses" : [{
        ....
        "StatusID": NumberLong(525623822633172993),
        ....
    }]
}

आप स्थिति सरणी में दस्तावेज़ों के क्रम को बदलने का प्रयास कर सकते हैं, और एक अलग मिलान दस्तावेज़ प्राप्त कर सकते हैं यदि वह दस्तावेज़ सरणी में अन्य मिलान करने वाले दस्तावेज़ों के आगे दिखाई देता है।

देखें:$elemMatch

अपनी आवश्यकता के अनुसार, यदि आप अपने परिणाम में सभी मिलान करने वाले सरणी तत्व चाहते हैं, तो आपको एक एकत्रीकरण ऑपरेशन करने की आवश्यकता है।

  • Match वे दस्तावेज़ जिनमें आवश्यक _id और वे दस्तावेज़ हैं जिनमें स्थिति उप दस्तावेज़ है जिसे हम खोज रहे हैं।
  • unwind स्थिति सरणी।
  • फिर से match व्यक्तिगत अनवांटेड दस्तावेज़।
  • आखिरकार group _id . द्वारा मिलान किए गए दस्तावेज़ ।

कोड:

db.collection.aggregate([
{$match:{ "_id": ObjectId("5439a2992ea8cc0f70feef2d"),
          "Statuses.StatusID":{$gte : NumberLong(525623822633172993)}}},
{$unwind:"$Statuses"},
{$match:{"Statuses.StatusID":{$gte : NumberLong(525623822633172993)}}},
{$group:{"_id":"$_id",statuses:{$push:"$Statuses"}}}
])

जो आपको सरणी में सभी मिलान करने वाले उप दस्तावेज़ देगा।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्थानीय मोंगो डेटाबेस को डॉकटर से कैसे कनेक्ट करें

  2. MongoDB:सरणी मिलान पैरामीटर में उप-दस्तावेज़ खोजें

  3. लुकअप से अंतिम दस्तावेज़ लौटाएं

  4. Grails 3.x . में MongoDB स्थापित करना और उसका उपयोग करना

  5. पुनः आरंभ होने तक प्रत्येक खोज अनुरोध पर इलास्टिक्स खोज समय समाप्त हो जाता है