Mongodb按键总和排序

时间:2016-04-19 06:14:30

标签: mongodb

我有一个json文档

{
   {
       "_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)
   }
}

我们如何按SUM排序文档顺序(" views"," likes"," comments")

像在mysql中的东西

SELECT SUM(key1, key2, key3) AS key
FROM document
ORDER BY key

提前致谢。

1 个答案:

答案 0 :(得分:2)

首先进行投影以获得所有喜欢,观点和评论的总和,然后根据该总和进行排序。如果在第二个片段

中需要,我正在考虑按content_id分组
db.test.aggregate([
    { $project : { "_id" : "$content_id", "total" : { $add : [ "$likes", "$views", "$comments"]}}},
    { $sort : { "total" : 1 }}
])

如果您需要组操作,则可以复制content_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) }