mongodb - 将某种行号添加到 mongodb 聚合命令/管道

标签 mongodb mongodb-query aggregation-framework row-number

这个想法是将一种行号返回给 mongodb 聚合命令/管道。类似于我们在 RDBM 中的内容。

它应该是一个唯一的数字,如果它与行/数字完全匹配并不重要。

对于这样的查询:

[ { $match: { "author" : { $ne: 1 } } }, { $limit: 1000000 } ]

我想回来:

{ "rownum" : 0, "title" : "The Banquet", "author" : "Dante", "copies" : 2 }
{ "rownum" : 1, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 }
{ "rownum" : 2, "title" : "Eclogues", "author" : "Dante", "copies" : 2 }
{ "rownum" : 3, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 }
{ "rownum" : 4, "title" : "Iliad", "author" : "Homer", "copies" : 10 }

是否可以在 mongodb 中生成此 rownum

最佳答案

不确定大型查询的性能,但这至少是一种选择。

您可以通过分组/推送将结果添加到数组中,然后像这样使用 includeArrayIndex 展开:

[
  {$match: {author: {$ne: 1}}},
  {$limit: 10000},
  {$group: {
    _id: 1,
    book: {$push: {title: '$title', author: '$author', copies: '$copies'}}
  }},
  {$unwind: {path: '$book', includeArrayIndex: 'rownum'}},
  {$project: {
    author: '$book.author',
    title: '$book.title',
    copies: '$book.copies',
    rownum: 1
  }}
]

现在,如果你的数据库包含大量记录,并且你打算分页,你可以使用 $skip 阶段,然后 $limit 10 或 20 或任何你想每页显示的内容,只需添加来自$skip 阶段到你的 rownum,你将获得真正的位置,而不必推送所有结果来枚举它们。

关于mongodb - 将某种行号添加到 mongodb 聚合命令/管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174554/

相关文章:

mongodb - 在 MongoDB 聚合中对嵌套字段使用 $multiply

node.js - nodejs中使用express和passport和mongodb的简单登录页面

mongodb - 在 mongodb 中的索引列上查找重复项的快速方法

mongodb - 如何访问嵌套数组中的最后一个位置

mongodb - Mongoose 查询匹配数组的文档,无论其元素顺序如何

mongodb - Spring Data – Mongo – 聚合

mongodb - 配置 Mongo shell 以默认将所有数字存储为整数

java - 在 java 中将 RFC3339 DateTime 转换为 Date

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素

node.js - mongoDB 聚合的分页 [Node.js]