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

SailJS और MongoDB एकत्रीकरण ढांचा कस्टम प्रश्नों के साथ परेशान करता है

आपकी पहली क्वेरी सही रास्ते पर थी जब आप गलत पाइपलाइन ऑपरेटर का उपयोग कर रहे थे।

Artist.native(function(err,collection) {

    collection.aggregate(
        [
            { "$project": {
                "_id": 1,
                "name": 1,
                "total": { "$size": "$dubs" }
            }}
        ],
        function(err,result) {
          if (err) return res.serverError(err);
          console.log(result);
        }
})

बेशक $size ऑपरेटर के लिए आवश्यक है कि आपको एक MongoDB 2.6 या उच्चतर संस्करण की आवश्यकता है, जो आपको शायद अब तक करना चाहिए, लेकिन आप सरणी की लंबाई को मापने के लिए ऑपरेटर के बिना अभी भी वही काम कर सकते हैं:

Artist.native(function(err,collection) {

    collection.aggregate(
        [
            { "$project": {
                "_id": 1,
                "name": 1,
                "dubs": {
                    "$cond": [
                       { "$eq": [ "$dubs", [] ] },
                       [0],
                       "$dubs"
                    ]
                }
            }},
            { "$unwind": "$dubs" },
            { "$group": {
                "_id": "$_id",
                "name": { "$first": "$name" },
                "total": { 
                    "$sum": {
                        "$cond": [
                            { "$eq": [ "$dubs", 0 ] },
                            0,
                            1
                        ]
                    }
                }
            }}
        ],
        function(err,result) {
          if (err) return res.serverError(err);
          console.log(result);
        }
})

वह सरणी के सदस्यों की गिनती करके वही काम करता है, लेकिन इसके बजाय आपको $खोलें उन्हें गिनने के लिए सरणी तत्व। तो यह अभी भी किया जा सकता है लेकिन उतना कुशल नहीं है।

इसके अतिरिक्त आपको उन मामलों को संभालने की आवश्यकता है जहां सरणी वास्तव में खाली है लेकिन मौजूद है क्योंकि कैसे $अनविंड करें एक खाली सरणी का व्यवहार करता है [] . यदि कोई सामग्री नहीं थी तो ऐसे तत्व वाले दस्तावेज़ को परिणामों से हटा दिया जाएगा। इसी तरह आपको $ का उपयोग करना होगा। अगर नल एक सरणी सेट करने के लिए जहां दस्तावेज़ में $अनविंड करें ताकि कोई त्रुटि न हो।

वास्तव में यदि आप नियमित रूप से इस प्रकार की क्वेरी करने का इरादा रखते हैं, तो आपको पहले इसकी गणना करने के बजाय दस्तावेज़ में "कुल" फ़ील्ड बनाए रखना चाहिए। $inc का उपयोग करें संचालन के साथ-साथ $push कोड> और $pull वर्तमान सरणी लंबाई का मिलान रखने के लिए।

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

तो इस तरह के दस्तावेज़ों के साथ:

{
  "dubs": [{},{},{}],
  "name": "The Doors",
  "createdAt": "2014-12-15T15:24:26.216Z",
  "updatedAt": "2014-12-15T15:24:26.216Z",
  "id": "548efd2a436c850000353f4f"
},
{
  "dubs": [],
  "name": "The Beatles",
  "createdAt": "2014-12-15T20:30:33.922Z",
  "updatedAt": "2014-12-15T20:30:33.922Z",
  "id": "548f44e90630d50000e2d61d"
}

आपको प्रत्येक मामले में ठीक वही परिणाम मिलते हैं जो आप चाहते हैं:

{
    "_id" : ObjectId("5494b79d7e22da84d53c8760"),
    "name" : "The Doors",
    "total" : 3
},
{
    "_id" : ObjectId("5494b79d7e22da84d53c8761"),
    "name" : "The Beatles",
    "total" : 0
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB '$geoNear क्वेरी के लिए अनुक्रमणिका खोजने में असमर्थ'

  2. MongoDB अपडेट:मौजूदा फ़ील्ड के आधार पर नया फ़ील्ड जेनरेट करें, या जगह में अपडेट करें

  3. नोएसक्यूएल (मोंगोडीबी) में प्रतिबद्ध और डिस्क दृढ़ता

  4. मोंगोडब डॉट फील्ड अपडेट

  5. मैं MongoDB C# Driver 2.0 में अपने प्रश्नों को कैसे लॉग करूं?