Mongodb使用查找查询生成行号

时间:2014-10-24 17:55:58

标签: mongodb aggregation-framework

我在mongo集合中有以下文件:

{name: "Test1", "date" : "2014-09-01"},
{name: "Test2", "date" : "2014-08-01"}
{name: "Test3", "date" : "2014-07-01"}
{name: "Test4", "date" : "2014-06-01"}
{name: "Test5", "date" : "2014-05-01"}
{name: "Test6", "date" : "2014-04-01"}

我发布了一个关于mongo的聚合查询(使用java)来查找特定日期之间的文档。查询的输出如下所示:

{name : Test3},
{name : Test4}

在这个输出中,我想要一个row_number,它应该从0开始,并且应该具有唯一值,如Oracle的rownum。在mongo有可能吗?

感谢。

1 个答案:

答案 0 :(得分:0)

尝试在mongo Db中寻找$ unwind运算符。 以下链接有助于: https://dandelaney.co/assigning-a-real-time-ranking-order-index-to-a-sorted-list-using-the-mongodb-aggregation-framework-1c072b2aa550 过滤文档后,应用展开运算符以获取结果并设置排名。希望以下示例将澄清相同的内容。 我们基本上先创建一个数组,然后将数组与数组索引(我们用作rownum / rank)展开

[
{ "$match": { }},
{"$group": {"_id": { "statement.actor.mbox":"$statement.actor.mbox", "organisation":"$organisation"},"points": { "$sum": "$statement.result.extensions.resultExt:pointsEarned"},"coins": { "$sum": "$statement.result.extensions.resultExt:coinsEarned"}}},
{"$sort": { "points" : -1 }},
{"$group": {"_id": 1,"results": {"$push": {"id": "$_id", "points": "$points", "coins": "$coins"}} }},
{"$unwind": {"path": "$results", "includeArrayIndex": "rank"}},
  {"$project": {
    "id": "$results.id",
    "points": "$results.points",
    "coins": "$results.coins",
    "rank": { "$add": [ "$rank", 1 ] }
  }}

]