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

$author (MongoDB) द्वारा दस्तावेज़ों और उप-दस्तावेज़ों के समूह से $sum

तुरंत दिखाई नहीं देता लेकिन संभव है। यहां आपको अपने शीर्ष स्तर के दस्तावेज़ को बिना डुप्लिकेट किए टिप्पणियों की सरणी के साथ संयोजित करने की आवश्यकता है। यहां सामग्री को पहले दो सरणियों के रूप में एकवचन सरणी में शामिल करने का तरीका दिया गया है, फिर $अनविंड करें सामग्री को समूहीकृत करने के लिए:

db.collection.aggregate([
    { "$group": {
        "_id": "$_id",
        "author": { 
            "$addToSet": {
                "id": "$_id",
                "author": "$author",
                "votes": "$votes"
            }
        },
        "comments": { "$first": "$comments" }
    }},
    { "$project": {
        "combined": { "$setUnion": [ "$author", "$comments" ] }
    }},
    { "$unwind": "$combined" },
    { "$group": {
        "_id": "$combined.author",
        "votes": { "$sum": "$combined.votes" }
    }},
    { "$sort": { "votes": -1 } }
])

जो आउटपुट देता है:

{ "_id" : "Jesse", "votes" : 148 }
{ "_id" : "Mirek", "votes" : 135 }
{ "_id" : "Leszke", "votes" : 13 }

यहां तक ​​कि पहले $group मंच और एक संयुक्त सरणी को एक अलग तरीके से बनाना:

db.collection.aggregate([
    { "$project": {
        "combined": { 
            "$setUnion": [
                { "$map": {
                    "input": { "$literal": ["A"] },
                    "as": "el",
                    "in": { 
                        "author": "$author",
                        "votes": "$votes"
                    }
                }},
                "$comments"
            ] 
        }
    }},
    { "$unwind": "$combined" },
    { "$group": {
        "_id": "$combined.author",
        "votes": { "$sum": "$combined.votes" }
    }},
    { "$sort": { "votes": -1 } }
])

वे ऑपरेटर का उपयोग करते हैं जैसे $setUnion और यहां तक ​​कि $map जिसे MongoDB 2.6 के रूप में पेश किया गया था। यह इसे आसान बनाता है, लेकिन यह अभी भी पुराने संस्करणों में किया जा सकता है जिनमें उन ऑपरेटरों की कमी है, जो समान सिद्धांतों का पालन करते हैं:

db.collection.aggregate([
    { "$project": {
        "author": 1,
        "votes": 1,
        "comments": 1,
        "type": { "$const": ["A","B"] }
    }},
    { "$unwind": "$type" },
    { "$unwind": "$comments" },
    { "$group": { 
        "_id": {
          "$cond": [
              { "$eq": [ "$type", "A" ] },
              { 
                  "id": "$_id", 
                  "author": "$author",
                  "votes": "$votes"
              },
              "$comments"
          ]
        }
    }},
    { "$group": {
        "_id": "$_id.author",
        "votes": { "$sum": "$_id.votes" }
    }},
    { "$sort": { "votes": -1 } }
])

$const अनिर्दिष्ट है लेकिन मोंगोडीबी के सभी संस्करणों में मौजूद है जहां एकत्रीकरण ढांचा मौजूद है (2.2 से)। MongoDB 2.6 पेश किया गया $literal जो अनिवार्य रूप से एक ही अंतर्निहित कोड से जुड़ता है। इसका उपयोग यहां दो मामलों में किया गया है ताकि या तो एक सरणी के लिए एक टेम्पलेट तत्व प्रदान किया जा सके, या दो क्रियाओं के बीच "बाइनरी विकल्प" प्रदान करने के लिए एक सरणी को खोलने के लिए शुरू किया जा सके।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongorestore का उपयोग करके MongoDB डेटाबेस को पुनर्स्थापित करें

  2. कोई अंतर्निहित दृश्य उपलब्ध नहीं है

  3. Django सत्र

  4. ट्रेलो कार्ड, सूचियों, चेकलिस्ट आदि की पुनर्व्यवस्था को कैसे संभालता है

  5. क्या मोंगोडब के लिए एसक्यूएल प्रोफाइलर जैसा समकक्ष उपकरण है?