MongoDB-使用另一个子数组字段更新父数组字段

我有这样的收藏

db.aa1.insertMany([
    { parentArr: [] },
    { parentArr: [
        {childArr: [ {childField: 2}, {childField: 4} ]}
    ] },
    { parentArr: [
        {childArr: []}
    ] },
    { parentArr: [
        {childArr: [ {childField: 3}, {childField: 5} ]}
    ] },
])

现在我希望最终结果像

[
    { parentArr: [] },
    { parentArr: [ { childArr: [] } ] },
    { parentArr: [
        { 
          childArr: [ {childField: 2}, {childField: 4} ],
          parentField: [2, 4]
        },
    ] },
    { parentArr: [
        { 
          childArr: [ {childField: 3}, {childField: 5} ],
          parentField: [3, 5]
        }
    ] },
]

在这里,我已经childArr.childField值复制到parentArr.parentField中。

现在在普通的JS中,我可以做这样的事情

parentArr.forEach(p => p.parentField = p.childArr ? p.childArr.map(c => c.childField) : [])

如何使用MongoDB查询来实现?

当然,我尝试了以下$ push $ set组合。

为了示例起见,我已经编写了所有push和set。

db.myCollection.update(
    {
        "parentArr.childArr.0": {$exists: true}
    }, 
    {
        $set: {"parentArr.$[].parentField": ["$parentArr.$[].childArr.$[].childField"]}

        $set: {"parentArr.parentField": ["$parentArr.childArr.childField"]}

        $push: {
            "parentArr.$[].parentField": {$each: ["$parentArr.$[].childArr.$[].childField"]}
        }

        $push: {
            "parentArr.parentField": {$each: ["$parentArr.childArr.childField"]}
        }
    },
    {
        upsert: true,
        multi: true
    }
)
汤姆·斯拉伯特

如果您使用的是Mongo 4.2+版本,则它们引入了管道更新,这意味着我们现在在更新时具有更多功能:

db.aa1.updateMany(
    {
        "parentArr.childArr.childField": {$exists: true}
    },
    [
        {
            $set: {
                "parentArr.parentField": {
                    $reduce: {
                        input: {
                            $map: {
                                input: "$parentArr",
                                as: "parent",
                                in: {
                                    $map: {
                                        input: "$$parent.childArr",
                                        as: "child",
                                        in: "$$child.childField"
                                    }
                                }
                            }
                        },
                        initialValue: [],
                        in: {$setUnion: ["$$value", "$$this"]}
                    }
                }
            }
        }
    ]
)

如果您使用的是较旧的Mongo版本,则必须在代码中进行操作,因为您已经发布了相关的代码段,因此我无需添加。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用另一个字段的值更新MongoDB字段

来自分类Dev

如何基于MongoDB聚合中数组内的另一个字段有条件地为父字段设置值?

来自分类Dev

根据mongodb中另一个数组字段的值将数组字段添加到集合中

来自分类Dev

如何在MongoDB更新中将字段的值推入同一文档的另一个数组字段中

来自分类Dev

mongodb查询以查找数组中的对象与另一个数组字段的元素不匹配的位置

来自分类Dev

如何使用MongoDB中的另一个数字字段更新数字字段

来自分类Dev

仅在mongodb中的字段小于另一个字段时更新

来自分类Dev

MongoDB使用另一个字段的值添加新字段

来自分类Dev

子文档数组上的 MongoDB 查询和投影也返回另一个文档的数组

来自分类Dev

MongoDB:根据另一个元素的存在更新数组的一个元素

来自分类Dev

根据MongoDB文档中的另一个字段更新一个字段(在Node.js中使用Mongoose)

来自分类Dev

根据MongoDB文档中的另一个字段更新一个字段(在Node.js中使用Mongoose)

来自分类Dev

如何从另一个mongodb集合中获取字段并将这些字段值添加为当前集合中的数组?

来自分类Dev

将第一个数组值复制到MongoDB中的另一个字段

来自分类Dev

如何从MongoDb中另一个字段的子字符串创建字段?

来自分类Dev

mongodb $ inc数组中的一个字段

来自分类Dev

MongoDB更新:向集合数组的每个元素添加一个字段

来自分类Dev

在MongoDB中的一个查询中将字段和$ push更新为数组

来自分类Dev

在MongoDB中的一个查询中将字段和$ push更新为数组

来自分类Dev

MongoDB插入/更新/删除数组的元素,该数组是另一个数组的元素

来自分类Dev

MongoDB-在另一个字段上使用$ nin

来自分类Dev

MongoDB高级查询-使用另一个字段的值

来自分类Dev

mongoDB $ set问题,使用文档的键值/另一个字段值

来自分类Dev

使用先前查询结果中的字段在mongodb中的另一个查询中

来自分类Dev

MongoDB-在另一个字段上使用$ nin

来自分类Dev

Mongodb:使用字段值查询,但还查询另一个未知的唯一字段

来自分类Dev

MongoDB聚合:将每个数组值从另一个字段添加到数组内的每个对象。合并/合并来自不同字段的两个数组

来自分类Dev

mongodb-从许多文档到一个数组字段的concat数组字段

来自分类Dev

Mongodb根据另一个数组元素过滤一个数组

Related 相关文章

  1. 1

    如何使用另一个字段的值更新MongoDB字段

  2. 2

    如何基于MongoDB聚合中数组内的另一个字段有条件地为父字段设置值?

  3. 3

    根据mongodb中另一个数组字段的值将数组字段添加到集合中

  4. 4

    如何在MongoDB更新中将字段的值推入同一文档的另一个数组字段中

  5. 5

    mongodb查询以查找数组中的对象与另一个数组字段的元素不匹配的位置

  6. 6

    如何使用MongoDB中的另一个数字字段更新数字字段

  7. 7

    仅在mongodb中的字段小于另一个字段时更新

  8. 8

    MongoDB使用另一个字段的值添加新字段

  9. 9

    子文档数组上的 MongoDB 查询和投影也返回另一个文档的数组

  10. 10

    MongoDB:根据另一个元素的存在更新数组的一个元素

  11. 11

    根据MongoDB文档中的另一个字段更新一个字段(在Node.js中使用Mongoose)

  12. 12

    根据MongoDB文档中的另一个字段更新一个字段(在Node.js中使用Mongoose)

  13. 13

    如何从另一个mongodb集合中获取字段并将这些字段值添加为当前集合中的数组?

  14. 14

    将第一个数组值复制到MongoDB中的另一个字段

  15. 15

    如何从MongoDb中另一个字段的子字符串创建字段?

  16. 16

    mongodb $ inc数组中的一个字段

  17. 17

    MongoDB更新:向集合数组的每个元素添加一个字段

  18. 18

    在MongoDB中的一个查询中将字段和$ push更新为数组

  19. 19

    在MongoDB中的一个查询中将字段和$ push更新为数组

  20. 20

    MongoDB插入/更新/删除数组的元素,该数组是另一个数组的元素

  21. 21

    MongoDB-在另一个字段上使用$ nin

  22. 22

    MongoDB高级查询-使用另一个字段的值

  23. 23

    mongoDB $ set问题,使用文档的键值/另一个字段值

  24. 24

    使用先前查询结果中的字段在mongodb中的另一个查询中

  25. 25

    MongoDB-在另一个字段上使用$ nin

  26. 26

    Mongodb:使用字段值查询,但还查询另一个未知的唯一字段

  27. 27

    MongoDB聚合:将每个数组值从另一个字段添加到数组内的每个对象。合并/合并来自不同字段的两个数组

  28. 28

    mongodb-从许多文档到一个数组字段的concat数组字段

  29. 29

    Mongodb根据另一个数组元素过滤一个数组

热门标签

归档