MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да групирате в агрегат, но също така да показвате други полета с помощта на Mongo?

Не сте публикували първоначалната структура на документа.

Document Structure:

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

Приемайки структурата на вашия документ, както е посочено по-горе, аз съставих тази заявка. Трябва да го манипулирате според вашите нужди.

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

Горната заявка е конструирана по следния начин:

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.

Изходният документ ще бъде нещо като

{
    "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. Защо MongoDB не използва пресичане на индекси?

  2. Как да внедрите twitter и facebook api като базирано на курсора пагиниране в mongodb в nodejs с помощта на официален клиент на mongodb?

  3. Закъсал при промяна на двоични данни към base64 (Gridfs-stream)

  4. регистрирайте всички заявки, които mongoose fire в приложението

  5. Как мога да актуализирам поддокумент на Mongoose в метод на екземпляр?