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

खाली सरणी दस्तावेज़ को क्वेरी में प्रकट होने से रोकती है

आप $cond एक $प्रोजेक्ट . में ऑपरेटर खाली attr . को बदलने का चरण सरणी जिसमें एक प्लेसहोल्डर होता है जैसे null जिसका उपयोग मार्कर के रूप में यह इंगित करने के लिए किया जा सकता है कि इस दस्तावेज़ में कोई attr नहीं है तत्व।

तो आप एक अतिरिक्त $project डालेंगे $अनविंड . से ठीक पहले इस तरह का चरण :

    {
        $project: {
            attrs: {$cond: {
               if: {$eq: ['$attrs', [] ]},
               then: [null],
               else: '$attrs'
           }}
        }
    },

केवल चेतावनी यह है कि आप एक शून्य . के साथ समाप्त होंगे अंतिम attrs में मान उन समूहों के लिए सरणी जिनमें कम से कम एक दस्तावेज़ बिना किसी attrs . है तत्वों, इसलिए आपको उन क्लाइंट-साइड को अनदेखा करने की आवश्यकता है।

उदाहरण

उदाहरण एक परिवर्तित $मिलान . का उपयोग करता है मंच क्योंकि आपके उदाहरण में से एक मान्य नहीं है।

इनपुट डॉक्स

[
  {_id: {type: 1, id: 2}, attrs: []},
  {_id: {type: 2, id: 1}, attrs: []},
  {_id: {type: 2, id: 2}, attrs: [{name: 'john', type: 22}, {name: 'bob', type: 44}]}
]

आउटपुट

{
    "result" : [ 
        {
            "_id" : 1,
            "attrs" : [ 
                null
            ]
        }, 
        {
            "_id" : 2,
            "attrs" : [ 
                {
                    "name" : "bob",
                    "type" : 44
                }, 
                {
                    "name" : "john",
                    "type" : 22
                }, 
                null
            ]
        }
    ],
    "ok" : 1
}

एग्रीगेट कमांड

db.test.aggregate([
    {
        $match: {
            '_id.servicePath': {
                $in: [
                    null
                ]
            }
        }
    },
    {
        $project: {
            _id: 1,
            "attrs.name": 1,
            "attrs.type": 1
        }
    },
    {
        $project: {
            attrs: {$cond: {
               if: {$eq: ['$attrs', [] ]},
               then: [null],
               else: '$attrs'
           }}
        }
    },
    {
        $unwind: "$attrs"
    },
    {
        $group: {
            _id: "$_id.type",
            attrs: {
                $addToSet: "$attrs"
            }
        }
    },
    {
        $sort: {
            _id: 1
        }
    }
])


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो में दिनांक के साथ दस्तावेज़ कैसे सम्मिलित करें?

  2. MongoDB में वास्तविक प्रकार का फ़ील्ड लौटाएं

  3. MongoDB कुल में ऑटो वृद्धिशील फ़ील्ड कैसे जोड़ें?

  4. MongoDB में डेटाबेस और संग्रह कैसे प्रबंधित करें

  5. mongoose findById async का उपयोग करके प्रतीक्षा करें