sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan grupperer man samlet, men viser også andre felter ved hjælp af Mongo?

Du har ikke indsendt din oprindelige dokumentstruktur.

Document Structure:

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

Forudsat din dokumentstruktur som ovenfor, har jeg komponeret denne forespørgsel. Du skal manipulere det efter dine behov.

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

Ovenstående forespørgsel er konstrueret som følger:

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.

Outputdokumentet vil være noget lignende

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



  1. Opdatering af en indlejret post i mongodb-array, når du ikke kender dokumentindekset

  2. MongoDB får executionStats for samlet forespørgsel

  3. Forespørgsel efter dokumenter, hvor matrixstørrelsen er større end 1

  4. Sådan løses TypeError:uhashbar type 'liste'