首页 > 解决方案 > mongodb 为每个检索到的文档添加计数器

问题描述

嘿,有没有办法为从 mongo 检索到的每个文档添加一个计数器?

假设我们在 mongo 中有用户:{_id, name}。我想全部获取它们,并且对于每个检索到的文档,我想添加一个计数器字段并在获取文档时增加它。

所以结果是

users : [{_id: "some_id_1", name: "john", counter: 1}, {_id: "some_id_2", name: "bob", counter: 2]

所以这个计数器字段会即时生成吗?

标签: mongodb

解决方案


尽管@prasad_ 提到的答案似乎有效,但 $unwind 自 Mongodb 3.2 以来就有includeArrayIndex 选项,可以更轻松地实现:

db.collection.aggregate([
  {
    $group: {
      _id: null,
      data: {
        $push: "$$ROOT"
      }
    }
  },
  {
    $unwind: {
      path: "$data",
      includeArrayIndex: "counter",

    }
  },
  {
    $replaceRoot: {
      newRoot: {
        $mergeObjects: [
          "$data",
          {
            counter: {
              $add: [
                "$counter",
                1
              ]
            }
          }
        ]
      }
    }
  }
])

最后阶段只是为了重塑您的文档,并为每个计数器添加 1,因为它是基于 0 的(基于数组索引)

你可以在这里测试它。


推荐阅读