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

Bagaimana cara mengelompokkan secara agregat tetapi juga menampilkan bidang lain menggunakan Mongo?

Anda belum memposting struktur dokumen awal Anda.

Document Structure:

{
    "_id" : ObjectId("50b59cd75bed76f46522c471"),
    "comment_id" : 61,
    "post_id" : 29,
    "comments" : [
                   {
                       "type" : "accepted",
                       "like" : 3
                   },
                   {
                      "type" : "rejected",
                      "like" : 3
                   },
                   {
                      "type" : "spam",
                      "like" : 3
                   }
                ]
}

Dengan asumsi struktur dokumen Anda seperti di atas, saya telah menyusun kueri ini. Anda harus memanipulasinya sesuai kebutuhan Anda.

db.posts.aggregate([
        {$unwind:"$comments"},
        {$match:{"$comments.type":{$ne:"spam"}}},
        {$group:{_id:{post_id:"$post_id",comment_id:"$comment_id"},LikeSum:{$sum:"$comments.like"}}},
        {$group:{_id:{post_id:"$_id.post_id"},AvgComments:{$avg:"$LikeSum"}}},
        {$sort:{AvgComments:-1}},
        {$limit:1}
              ])

Query di atas dibangun sebagai berikut:

1.) Unwind the comments array and form individual documents for each element in the comments array
2.) Select only the non-spam comments
3.) Calculate the sum of likes for each comment of all posts
4.) Calculate the average Comment likes for each post
5.) Sort documents in descending order of Average Comment Likes
6.) Select only the first document.

Dokumen keluaran akan menjadi seperti

{
    "result" : [
        {
            "_id" : {
                       "post_id" : xx
                    },
            "AvgComments" : xx.xx // Avg Comment likes for post xx
        }
               ],
    "ok" : 1
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. layanan mongodb tidak dimulai

  2. SchemaType mana di Mongoose yang Terbaik untuk Timestamp?

  3. menangani @ dalam string koneksi mongodb

  4. Bagaimana cara membuat kueri untuk memperbarui dokumen array bersarang di mongo?

  5. Operasi penulisan file dalam skrip mongo?