Mongodb按键和排序
我有一个json文档Mongodb按键和排序,mongodb,Mongodb,我有一个json文档 { { "_id" : ObjectId("5715c4bbac530eb3018b456a"), "content_id" : "5715c4bbac530eb3018b4569", "views" : NumberLong(200), "likes" : NumberLong(100), "comments" : NumberLong(0) }, { "_id" : O
{
{
"_id" : ObjectId("5715c4bbac530eb3018b456a"),
"content_id" : "5715c4bbac530eb3018b4569",
"views" : NumberLong(200),
"likes" : NumberLong(100),
"comments" : NumberLong(0)
},
{
"_id" : ObjectId("5715c4bbac530eb3018b4568"),
"content_id" : "5715c4bbac530eb3018b4567",
"views" : NumberLong(300),
"likes" : NumberLong(200),
"comments" : NumberLong(0)
},
{
"_id" : ObjectId("5715c502ac530ee5018b4956"),
"content_id" : "5715c502ac530ee5018b4955",
"views" : NumberLong(500),
"likes" : NumberLong(0),
"comments" : NumberLong(200)
}
}
我们如何按总和(“视图”、“喜欢”、“评论”)对文档进行排序
类似于mysql
SELECT SUM(key1, key2, key3) AS key
FROM document
ORDER BY key
提前感谢。首先做一个投影,以获得所有喜欢、观点和评论的总和,然后根据该总和进行排序。如果第二段中需要,我正在考虑按内容分组
db.test.aggregate([
{ $project : { "_id" : "$content_id", "total" : { $add : [ "$likes", "$views", "$comments"]}}},
{ $sort : { "total" : 1 }}
])
如果可以复制内容id,则需要组操作
db.test.aggregate([
{ $project : { "_id" : "$content_id", "total" : { $add : [ "$likes", "$views", "$comments"]}}},
{ $group : { "_id" : "$_id" , totalPerId : { $sum : "$total" }}},
{ $sort : { "total" : 1 }}
])
根据您的测试数据,您将获得:
{ "_id" : "5715c502ac530ee5018b4955", "totalPerId" : NumberLong(700) }
{ "_id" : "5715c4bbac530eb3018b4567", "totalPerId" : NumberLong(500) }
{ "_id" : "5715c4bbac530eb3018b4569", "totalPerId" : NumberLong(300) }
您必须使用聚合方法,以便首先计算总和,然后使用它对数据进行排序。