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

MongoDB मूल्य के घटित होने तक पिछले रिकॉर्ड के एकत्रीकरण की तरह कुल चल रहा है

इस एकत्रीकरण का प्रयास करें

  1. $match - gameId द्वारा फ़िल्टर करें
  2. $sort - टाइमस्टैम्प द्वारा दस्तावेज़ ऑर्डर करें
  3. $group - सभी मिलानों को एक सरणी में जमा करें
  4. $addFields - $reduce दस्तावेज़ में हत्याओं की गणना, फ़िल्टर और मानचित्र हत्याओं की गणना करने के लिए
  5. $unwind - मूल दस्तावेज़ संरचना प्राप्त करने के लिए फ्लैट सरणी
  6. $replaceRoot - डेटा को मूल संरचना की तरह शीर्ष स्तर पर ले जाएं

पाइपलाइन

db.games.aggregate([
    {$match : {gameId : 1}},
    {$sort : {timestamp : 1}},
    {$group : {_id : "$gameId", data : {$push : "$$ROOT"}}},
    {$addFields : {data : {
        $reduce : {
            input : "$data",
            initialValue : {kills : [], data : [], count : 0},
            in : {
                count : {$sum : ["$$value.count", {$cond : [{$eq : ["$$this.type", "ENEMY_KILLED"]}, 1, 0]}]},
                data : { $concatArrays : [
                     "$$value.data", 
                     {$cond : [
                            {$ne : ["$$this.type", "ENEMY_KILLED"]}, 
                            [
                                {
                                    _id : "$$this._id",
                                    gameId : "$$this.gameId",
                                    participantId : "$$this.participantId",
                                    type : "$$this.type",
                                    timestamp : "$$this.timestamp",
                                    kills : {$sum : ["$$value.count", {$cond : [{$eq : ["$$this.type", "ENEMY_KILLED"]}, 1, 0]}]}
                                }
                            ],
                            []
                        ]}
                    ]}
                }
            }}
    }},
    {$unwind : "$data.data"},
    {$replaceRoot : {newRoot : "$data.data"}}
]).pretty()

संग्रह

> db.games.find()
{ "_id" : 1, "gameId" : 1, "participantId" : 3, "type" : "ITEM_PURCHASED", "timestamp" : 656664 }
{ "_id" : 2, "gameId" : 1, "participantId" : 3, "victimId" : 9, "type" : "ENEMY_KILLED", "timestamp" : 745245 }
{ "_id" : 3, "gameId" : 1, "participantId" : 3, "victimId" : 7, "type" : "ENEMY_KILLED", "timestamp" : 746223 }
{ "_id" : 4, "gameId" : 1, "participantId" : 3, "type" : "ITEM_PURCHASED", "timestamp" : 840245 }

परिणाम

{
    "_id" : 1,
    "gameId" : 1,
    "participantId" : 3,
    "type" : "ITEM_PURCHASED",
    "timestamp" : 656664,
    "kills" : 0
}
{
    "_id" : 4,
    "gameId" : 1,
    "participantId" : 3,
    "type" : "ITEM_PURCHASED",
    "timestamp" : 840245,
    "kills" : 2
}
> 



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB 2dsphere अनुक्रमणिका विफल (विकृत ज्यामिति?)

  2. MongoDB पर _id के रूप में इसके स्ट्रिंग प्रतिनिधित्व के बजाय UUID का उपयोग करने के लिए प्रदर्शन लाभ?

  3. यह पता लगाने के लिए कि क्या फ़ाइल क्लाइंट साइड से माध्य/कोणीय जेएस में सफलतापूर्वक डाउनलोड होती है?

  4. सॉकेट अपवाद:पता पहले से ही उपयोग में है MONGODB

  5. MongoDB - सॉकेट के लिए अनुमति अस्वीकृत:/tmp/mongodb-27017.sock