Mongodb:获取按动态排名排序的文档

Mongodb:获取按动态排名排序的文档,mongodb,sorting,aggregation-framework,Mongodb,Sorting,Aggregation Framework,我有以下文件: { "_id" : ObjectId("52abac78f8b13c1e6d05aeed"), "score" : 125494, "updated" : ISODate("2013-12-14T00:55:20.339Z"), "url" : "http://pictwittrer.com/1crfS1t" } { "_id" : ObjectId("52abac86f8b13c1e6d05af0f"), "score" : 123166, "updated" : ISODat

我有以下文件:

{ "_id" : ObjectId("52abac78f8b13c1e6d05aeed"), "score" : 125494, "updated" : ISODate("2013-12-14T00:55:20.339Z"), "url" : "http://pictwittrer.com/1crfS1t" }
{ "_id" : ObjectId("52abac86f8b13c1e6d05af0f"), "score" : 123166, "updated" : ISODate("2013-12-14T00:55:34.354Z"), "url" : "http://bit.ly/JghJ1N" }
现在,我想按照这个动态排名对所有文档进行排序:

ranking = score / (NOW - updated).abs
排名是一个浮动值,其中: -score是我的文档的scopre属性的值 -分母只是现在(执行此查询时)和文档的更新字段之间的差异


我之所以要这样做,是因为我希望旧文档最后被排序。看看MongoDB聚合框架,你可以做一个项目来创建你想要的分数,然后按照创建的分数进行排序


我不熟悉Mongodb和聚合框架,但考虑到给出的答案,我提出了以下建议:

db.coll.aggregate(
      { $project : {
                     "ranking" : { 
                                  "$divide" : ["$score", {"$subtract":[new Date(), "$updated"]}]
                                 }
                   }
      },
      { $sort : {"ranking" : 1}})
使用可以重塑文档的形状以插入预计算的值,在您的情况下是“排名”字段。使用该命令之后,您可以按照自己喜欢的顺序对文档进行排序,方法是指定1表示升序,指定-1表示降序。
对于糟糕的代码格式,我很抱歉,我尽可能让它可读。

太好了!您还知道如何返回每个文档的所有字段吗?在这里,它只返回“_id”和“ranking”@Nikolay Manolov,您不必告诉它包含
_id
——默认情况下包含它。(也不是
“\u id”:“$\u id”
你应该做
“\u id”:1
)目前无法告诉它返回所有字段+排名,你必须手动列出字段。。。