>我有一个名为 users 的集合,其文档的结构如下
{
"_id" : <user_id>,
"NAME" : "ABC",
"TIME" : 53.0,
"OBJECTS" : 1
},
{
"_id" : <user_id>,
"NAME" : "ABCD",
"TIME" : 353.0,
"OBJECTS" : 70
}
现在,我想对整个集合的 OBJECTS
值求和,并将值与对象一起返回。
像这样的东西
{
{
"_id" : <user_id>,
"NAME" : "ABC",
"TIME" : 53.0,
"OBJECTS" : 1
},
{
"_id" : <user_id>,
"NAME" : "ABCD",
"TIME" : 353.0,
"OBJECTS" : 70
},
"TOTAL_OBJECTS": 71
}
或者任何我不必在接收的对象上进行计算并可以直接从它访问的方式。现在,我尝试查找此内容,但我没有发现现有文档的层次结构未被破坏的地方。
您可以使用$group
指定null
作为分组 ID。您需要将所有文档收集到一个数组中(使用$$ROOT
变量(,另一个字段可以表示OBJECT
的总和,如下所示:
db.users.aggregate([
{
$group: {
_id: null,
documents: { $push: "$$ROOT" },
TOTAL_OBJECTS: { $sum: "$OBJECTS" }
}
}
])
db.users.aggregate(
// Pipeline
[
// Stage 1
{
$group: {
_id: null,
TOTAL_OBJECTS: {
$sum: '$OBJECTS'
},
documents: {
$addToSet: '$$CURRENT'
}
}
},
]
);
在上面的聚合查询中,我使用运算符将所有文档推送到数组中$addToSet作为聚合操作阶段的一部分$group