我有以下用户收集文档:
user: {
_id: ObjectId("...")
name: "Kid",
items: [
{
name: "pencil",
type: "SCHOOL",
amount: 1.00
},
{
name: "computer",
type: "PERSONAL",
amount: 9999.99
},
{
name: "notebook",
type: "SCHOOL",
amount: 9.00
}
]
}
现在,我试图schoolAmount
通过将SCHOOL
类型为子文档中的数量相加来为顶级文档添加一个新字段。因此,在上述示例文档中将具有schoolAmount: 10.00 // (1 + 9)
。我该如何查询?我只知道像下面这样使用shell的简单查询。
db.user.updateMany({}, {$set: {"schoolAmount": <I need help here>}});
我认为文档看起来像用户内部一样。然后首先进行聚合并将输出存储在游标中,然后在游标上进行迭代,我可以更新总数。
var output = db.test.aggregate([{"$match":{name:"Kid"}},{"$unwind":"$items"},{"$match":{"items.type":"SCHOOL"}},{"$group":{"_id":"$name","total" :{$sum: "$items.amount"}}}])
while (output.hasNext()) {
var doc = output.next();
print(doc._id);
print(doc.total);
db.test.update({"name":doc._id},{$set:{"total":doc.total}})
}
最终文件
{
"_id" : ObjectId("5f07e1616fddd269188c731c"),
"name" : "Kid",
"items" : [
{
"name" : "pencil",
"type" : "SCHOOL",
"amount" : 1
},
{
"name" : "computer",
"type" : "PERSONAL",
"amount" : 9999.99
},
{
"name" : "notebook",
"type" : "SCHOOL",
"amount" : 9
}
],
"total" : 10
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句