MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB menjalankan total seperti agregasi catatan sebelumnya hingga munculnya nilai

coba agregasi ini

  1. $match - filter menurut gameId
  2. $sort - pesan dokumen dengan stempel waktu
  3. $group - kumpulkan semua yang cocok ke array
  4. $addFields - $reduce untuk menghitung pembunuhan, memfilter, dan memetakan pembunuhan untuk didokumentasikan
  5. $unwind - array datar untuk mendapatkan struktur dokumen asli
  6. $replaceRoot - pindahkan data ke tingkat atas seperti pada struktur aslinya

pipa

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()

koleksi

> 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 }

hasil

{
    "_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. Kueri mongodb data pegas untuk bidang subdokumen

  2. Akses elemen dalam array mongo di java

  3. Menyimpan dengan Java springdata dokumen mongoDB dengan array yang dibatasi ($slice dan $sort)

  4. GALAT:Tidak dapat menulis file pid ke /var/run/mongodb/mongod.pid:Tidak ada file atau direktori seperti itu inf fedora 20

  5. cara memperbarui banyak dokumen dengan nilai berbeda