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

क्या कुल मिलाकर एकल परिणाम प्राप्त करना संभव है?

हाँ यह संभव है। बस एक $group जोड़ें _id . के साथ चरण null . के बराबर . यह समग्र रूप से सभी इनपुट दस्तावेजों के लिए संचित मूल्यों की गणना करेगा। उदा.

{ $group: { _id: null, total: { $sum: "$price" }}}

या यदि आप समेकित परिणामों से केवल एक दस्तावेज़ प्राप्त करना चाहते हैं, तो आप $limit . का उपयोग कर सकते हैं :

{ $limit: 1 }

अद्यतन:ये दोनों समाधान कर्सर लौटाते हैं जिसमें सिंगल डॉक्यूमेंट होगा। लेकिन findOne के बारे में न सोचें कुछ खास के रूप में। यह कर्सर को भी पुनः प्राप्त करता है और केवल पहला दस्तावेज़ (यदि कोई हो) प्राप्त करता है। यहाँ findOne . का मोंगो शेल कार्यान्वयन है :

function ( query , fields, options ){
    var cursor = this.find(query, fields, -1 /* limit */, 0 /* skip*/,
        0 /* batchSize */, options);

    if ( ! cursor.hasNext() )
        return null;
    var ret = cursor.next();
    if ( cursor.hasNext() ) throw "findOne has more than 1 result!";
    if ( ret.$err )
        throw "error " + tojson( ret );
    return ret;
}

जैसा कि आप देख सकते हैं, यह आंतरिक रूप से find . का उपयोग करता है . इसलिए, यदि आप एकल दस्तावेज़ के साथ कर्सर के बजाय एकल दस्तावेज़ प्राप्त करना चाहते हैं, तो आप अपना स्वयं का फ़ंक्शन लिख सकते हैं जो aggregate के साथ भी ऐसा ही करता है . उदा.

> DBCollection.prototype.aggregateOne = function(pipeline) {
     var cur = this.aggregate(pipeline);
     if (!cur.hasNext())
         return null; 
     return cur.next(); 
 }

उपयोग:

> db.collection.aggregateOne(...)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला में __v फ़ील्ड क्या है

  2. कैसे MongoDB डेटाबेस ऑटोमेशन सुरक्षा में सुधार करता है

  3. MongoDB में पृष्ठ दोष ठीक करना

  4. मोंगोडीबी $स्लाइस

  5. क्या MongoDB में संग्रहीत सरणियाँ अपना क्रम बनाए रखती हैं?