如何将文档流聚合成一个带有数组字段的文档? (mongodb)
How to aggregate documents flow into a single document with an array field? (mongodb)
我有这个数据集:
[
{
userId: 1,
nickname: 'a'
},
{
userId: 2,
nickname: 'b'
},
{
userId: 3,
nickname: 'c'
},
...
]
我想使用聚合来实现这种形式:
{
newField: 123456,
users: [
{
userId: 1,
nickname: 'a'
},
{
userId: 2,
nickname: 'b'
},
{
userId: 3,
nickname: 'c'
},
...
],
}
文档流合并到单个文档内的单个数组字段中,我想向其中添加一些额外的字段。在聚合管道中的第 n 个阶段后检索初始数据集。
考虑到所有这些:
下一阶段应该是什么?
这里需要 $group 吗?
我的下一个舞台应该是什么样子?
db.users.aggregate([
...,
{ $whatStage: <what do I do inside of it...> }
])
如果我没理解错你可以试试这个查询:
按 null
分组可确保所有值都已分组。 $push
$$ROOT
对象(即文档)。
db.collection.aggregate([
{
"$group": {
"_id": null,
"users": {
"$push": "$$ROOT"
}
}
}
])
示例here
此外,要添加新字段,您可以使用 $first
到组 (example) or a new stage with $set
, $addFields
or $project
like this example
我有这个数据集:
[
{
userId: 1,
nickname: 'a'
},
{
userId: 2,
nickname: 'b'
},
{
userId: 3,
nickname: 'c'
},
...
]
我想使用聚合来实现这种形式:
{
newField: 123456,
users: [
{
userId: 1,
nickname: 'a'
},
{
userId: 2,
nickname: 'b'
},
{
userId: 3,
nickname: 'c'
},
...
],
}
文档流合并到单个文档内的单个数组字段中,我想向其中添加一些额外的字段。在聚合管道中的第 n 个阶段后检索初始数据集。
考虑到所有这些:
下一阶段应该是什么?
这里需要 $group 吗?
我的下一个舞台应该是什么样子?
db.users.aggregate([
...,
{ $whatStage: <what do I do inside of it...> }
])
如果我没理解错你可以试试这个查询:
按 null
分组可确保所有值都已分组。 $push
$$ROOT
对象(即文档)。
db.collection.aggregate([
{
"$group": {
"_id": null,
"users": {
"$push": "$$ROOT"
}
}
}
])
示例here
此外,要添加新字段,您可以使用 $first
到组 (example) or a new stage with $set
, $addFields
or $project
like this example