(MongoDB)向文档中添加一个新字段,其值为其嵌套子文档数组的总和

梦中梦

我有以下用户收集文档:

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>}});
Java程序员12

我认为文档看起来像用户内部一样。然后首先进行聚合并将输出存储在游标中,然后在游标上进行迭代,我可以更新总数。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在每个文档中添加一个新字段,并在mongodb中为同一文档的另一个字段赋值

通过mongodb中的聚合和$ facet在每个文档中添加一个新字段

一个文档字段的总和mongodb

向mongoDB嵌入文档添加新字段

向MongoDB集合中的每个文档添加新字段

在MongoDB文档中向对象添加新字段

从MongoDB中的所有文档中获取数组字段的第一个元素的总和

PHP MongoDB \ Client更新一个将新字段添加到现有文档数组

如果 MongoDB 中不存在则创建文档并以原子方式向其添加字段

根据给定文档的值是否在数组中,使用布尔值创建一个新字段

MongoDB:查询文档,其中一个字段等于其子文档字段之一?

添加新字段,它是文档中另一个字段的大小

MongoDB:如何为集合中的每个文档设置一个新字段,该字段等于另一个字段的值

在mongo文档中找到数组中的最后一项,并检查其字段是否为某个值

每个文档的mongodb检索其字段+通过引用在另一个集合中的ID计数

MongoDB Aggregate在文档中添加一个新字段(如果已存在另一个字段)

查询在 MongoDb 集合中的所有文档中创建一个新字段

查找一个mongodb文档,该文档的字段值与输入数组的某项匹配

在MongoDB 4.2中按天向N个重置次数最多的文档中添加新字段

MongoDB聚合嵌套子文档字段

在mongoDB中添加嵌套子文档的最佳方法

为什么我的数组总是为零,我尝试向数组中添加一个项目以共享文档

将多张图像合并到一个文档中,并向其添加任何标题/标签

对查询结果基于Mongoose / Mongodb数组中嵌套子文档的desc值进行排序

使用mongoose通过更新方法向mongodb中的现有文档添加新字段

在Mongodb中深度嵌套的文档中更新字段

如何使用Mongodb将同一个名称的文档归为一个数组中的特定属性具有不同值的同名文档?

mongodb中数组数组内的文档的更新字段

在 JSON 数组中查找一个对象并为其添加一个值