MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để nhóm tổng hợp nhưng cũng hiển thị các trường khác bằng cách sử dụng Mongo?

Bạn đã không đăng cho bạn cấu trúc tài liệu ban đầu.

Document Structure:

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

Giả sử cấu trúc tài liệu của bạn như trên, tôi đã soạn truy vấn này. Bạn phải thao tác nó theo nhu cầu của mình.

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

Truy vấn trên được xây dựng như sau:

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.

Tài liệu đầu ra sẽ giống như

{
    "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. Cách tạo chỉ mục phân biệt chữ hoa chữ thường trong MongoDB

  2. Lumen và MongoDB?

  3. Duy trì thứ tự các yêu cầu http trong vòng lặp for trong javascript

  4. mongoose tổng hợp cách ánh xạ nhiều bộ sưu tập vào một Mảng

  5. Làm cách nào để tính tổng các mảng từ các tài liệu khác nhau trong MongoDB Aggregation?