mongodb - mongodb 为每个检索到的文档添加计数器
问题描述
嘿,有没有办法为从 mongo 检索到的每个文档添加一个计数器?
假设我们在 mongo 中有用户:{_id, name}。我想全部获取它们,并且对于每个检索到的文档,我想添加一个计数器字段并在获取文档时增加它。
所以结果是
users : [{_id: "some_id_1", name: "john", counter: 1}, {_id: "some_id_2", name: "bob", counter: 2]
所以这个计数器字段会即时生成吗?
解决方案
尽管@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 的(基于数组索引)
推荐阅读
- java - Spring Boot,使用相同的端点调用 2 个函数(可选参数)
- vue.js - mdi-vue 图标显示两次
- spring-batch - Spring Batch 异常记录
- sharepoint - 我有一个强大的应用程序(将数据存储在 sharepoint 中),现在它已准备好上线,但推出的最佳实践是什么
- svg - svg路径的奇怪行为
- bash - 在mac上捕获光标终端位置的Shell脚本会产生额外的字符
- jakarta-ee - Java 8 和 Servlet 4 的 Maven 依赖项是什么?
- c# - 如何将 C# 中的游戏价值基于其从 0 的大小而不是其实际价值?
- mysql - 无法在mysql上创建用户
- wget - 如何在 Linux 中使用 wget 从服务器下载所有文件以及所有子目录?