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

MongoDB के साथ उप-दस्तावेज़ में सरणी को कैसे फ़िल्टर करें?

aggregate का उपयोग करना सही तरीका है, लेकिन आपको $unwind की आवश्यकता है list $match . लागू करने से पहले सरणी ताकि आप अलग-अलग तत्वों को फ़िल्टर कर सकें और फिर $group . का उपयोग कर सकें इसे वापस एक साथ रखने के लिए:

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $unwind: '$list'},
    { $match: {'list.a': {$gt: 3}}},
    { $group: {_id: '$_id', list: {$push: '$list.a'}}}
])

आउटपुट:

{
  "result": [
    {
      "_id": ObjectId("512e28984815cbfcb21646a7"),
      "list": [
        4,
        5
      ]
    }
  ],
  "ok": 1
}

MongoDB 3.2 अपडेट

3.2 रिलीज से शुरू करके, आप नए $filter . का उपयोग कर सकते हैं एग्रीगेशन ऑपरेटर केवल list . को शामिल करके इसे और अधिक कुशलता से करने के लिए $project . के दौरान आप जो तत्व चाहते हैं :

db.test.aggregate([
    { $match: {_id: ObjectId("512e28984815cbfcb21646a7")}},
    { $project: {
        list: {$filter: {
            input: '$list',
            as: 'item',
            cond: {$gt: ['$$item.a', 3]}
        }}
    }}
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडीबी $acosh

  2. मोंगोडीबी $सप्ताह

  3. मैं रोबोमोंगो का उपयोग करके मोंगोडीबी एटलस से कैसे जुड़ सकता हूं?

  4. मोंगोडब क्वेरी किसी दिए गए कुंजी वाले रिकॉर्ड का चयन करने के लिए

  5. Node.js + mongoose 100 से अधिक परिणाम मिलने पर फ़्रीज़ नोड ढूंढते हैं