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

समूह के साथ कैसे एकत्र करें और सही ढंग से क्रमबद्ध करें

समझने के लिए यहां कुछ कैच हैं।

जब आप $group का इस्तेमाल करते हैं सीमाओं को इस क्रम में क्रमबद्ध किया जाएगा कि उन्हें प्रारंभिक या समाप्ति चरण के बिना खोजा गया था $सॉर्ट करें संचालन। तो अगर आपके दस्तावेज़ मूल रूप से इस तरह के क्रम में थे:

{ uid: 1, created: ISODate("2014-05-02..."), another_col : "x" },
{ uid: 1, created: ISODate("2014-05-05..."), another_col : "y" },
{ uid: 3, created: ISODate("2014-05-05..."), another_col : "w" },
{ uid: 2, created: ISODate("2014-05-10..."), another_col : "z" },

फिर बस $group का इस्तेमाल करके बिना $sort अंत में पाइपलाइन पर आपको इस तरह के परिणाम लौटाएगा:

{ uid: 1, created: ISODate("2014-05-05..."), another_col : "y" },
{ uid: 3, created: ISODate("2014-05-05..."), another_col : "w" },
{ uid: 2, created: ISODate("2014-05-10..."), another_col : "z" },

यह एक अवधारणा है, लेकिन वास्तव में ऐसा लगता है कि आप परिणामों में जो उम्मीद कर रहे हैं, उसे uid के क्रमबद्ध क्रम से "अंतिम अन्य फ़ील्ड" वापस करने की आवश्यकता है आप जो खोज रहे हैं वह है। उस स्थिति में आपका परिणाम प्राप्त करने का तरीका वास्तव में $sort . है पहले और फिर $last<का उपयोग करें /कोड> ऑपरेटर:

db.mycollection.aggregate([

    // Sorts everything first by _id and created
    { "$sort": { "_id": 1, "created": 1 } },

    // Group with the $last results from each boundary
    { "$group": {
        "_id": "$uid",
        "created": { "$last": "$created" },
        "another_col": { "$last": "$created" }
    }}
])

या अनिवार्य रूप से आप जो चाहते हैं उस पर सॉर्ट लागू करें।

$last के बीच अंतर और $max यह है कि बाद वाला समूह _id के भीतर दिए गए फ़ील्ड के लिए "उच्चतम" मान का चयन करेगा , अन-सॉर्टेड ऑर्डर पर वर्तमान सॉर्ट किए गए की परवाह किए बिना। दूसरी ओर, $last "अंतिम" समूह के समान "पंक्ति" में होने वाले मान को चुनेंगे _id मूल्य।

यदि आप वास्तव में किसी सरणी के मानों को क्रमबद्ध करना चाह रहे थे तो दृष्टिकोण समान है। सरणी सदस्यों को "बनाए गए" क्रम में रखते हुए आप पहले भी क्रमबद्ध करेंगे:

db.mycollection.aggregate([

    // Sorts everything first by _id and created
    { "$sort": { "_id": 1, "created": 1 } },

    // Group with the $last results from each boundary
    { "$group": {
        "_id": "$uid",
        "row": {
            "$push": {
                "created": "$created",
                "another_col": "$another_col"
            }
        }
    }}
])

और उन फ़ील्ड वाले दस्तावेज़ों को सरणी में उसी क्रम में जोड़ दिया जाएगा जिस क्रम से वे पहले से क्रमबद्ध थे।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. प्रश्न चिह्न टाइपप्रति चर

  2. मोंगोस सीमा उप-दस्तावेजों के साथ मोंगोडीबी

  3. मोंगोडब और एक्सप्रेस शुरू करने का सही तरीका?

  4. Mongodb का उपयोग करके गैर-संबंधपरक डेटाबेस के साथ शुरुआत करना

  5. इवेंट / लॉग / मेट्रिक्स डेटा को स्टोर करने और क्वेरी करने के लिए कौन सा डेटाबेस (कैसंड्रा, मोंगोडीबी,?) चुनना है?