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
}