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

रेल में Mongoid Group By या MongoDb group by

जैसा कि टिप्पणियों में बताया गया है, आप इस उद्देश्य के लिए मानचित्र/कमी का उपयोग कर सकते हैं। तो आप अपने मॉडल में निम्नलिखित विधि को परिभाषित कर सकते हैं ( http://mongoid.org/en/mongoid/docs/querying.html#map_reduce )

def self.today
  map = %Q{
    function() {
      emit(this.course_id, {count: 1})
    }
  }

  reduce = %Q{
    function(key, values) {
      var result = {count: 0};
      values.forEach(function(value) {
        result.count += value.count;
      });
      return result;
    }
  }

  self.where(:created_at.gt => Date.today, status: "played").
    map_reduce(map, reduce).out(inline: true)
end

जिसके परिणामस्वरूप निम्नलिखित परिणाम होंगे:

[{"_id"=>1.0, "value"=>{"count"=>2.0}}, {"_id"=>2.0, "value"=>{"count"=>1.0}}] 

जहां _id course_idहै और count नाटकों की संख्या है।

MongoDB में समर्पित समूह विधि भी है लेकिन मुझे यकीन नहीं है कि Mongoid 3 में नंगे mongodb संग्रह कैसे प्राप्त करें। मुझे अभी तक कोड में गोता लगाने का मौका नहीं मिला है।

आपको आश्चर्य हो सकता है कि मैं एक दस्तावेज़ क्यों छोड़ता हूँ {count: 1} क्योंकि इससे कोई फर्क नहीं पड़ता और मैं खाली दस्तावेज़ या कुछ भी उत्सर्जित कर सकता था और फिर परिणाम में हमेशा 1 जोड़ सकता था। प्रत्येक मूल्य के लिए गिनती। बात यह है कि कम नहीं कहा जाता है यदि विशेष कुंजी के लिए केवल एक उत्सर्जन किया गया है (मेरे उदाहरण में course_id केवल एक बार खेला गया है) इसलिए परिणाम के रूप में उसी प्रारूप में दस्तावेज़ों का उत्सर्जन करना बेहतर है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB {एकत्रीकरण $ मैच} बनाम {ढूंढें} गति

  2. प्रोजेक्शन खोज क्वेरी के साथ काम नहीं कर रहा है

  3. प्रत्येक समूह के लिए अंतिम सही मान लौटाएं

  4. मैं एक मोंगोडब खोल क्वेरी में एक ग्रिड का उपयोग कैसे करूं?

  5. क्या कोई कारण हैं कि मुझे अपने रीस्टफुल यूआरएल में ऑब्जेक्ट आईडी का उपयोग क्यों नहीं करना चाहिए/नहीं करना चाहिए?