更新数组和内部数组中匹配的所有对象

保罗·瑞安·卢塞罗

我有这个文件结构

{
    "_id": <OBJECT_ID>,
    "orders": [
         {
              "userId": 1,
              "handleName": "John Doe",
              "orderAmount": 3,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "John Doe"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         },
         {
              "userId": 2,
              "handleName": "Maria Gigante",
              "orderAmount": 2,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "John Doe"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         },
         {
              "userId": 1,
              "handleName": "John Doe",
              "orderAmount": 4,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "John Doe"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         },
         {
              "userId": 3,
              "handleName": "John Doe",
              "orderAmount": 4,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "John Doe"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         }
    ]
}

我想更新所有具有userIdof1handleNameof的对象John Doe请注意,对象可以具有相同的句柄名称,但可以具有不同的用户ID。这就是为什么我需要将其与第userId一个匹配

例如,我想将句柄名称更改为 Donald Stark

我想要这样的结果:

{
    "_id": <OBJECT_ID>,
    "orders": [
         {
              "userId": 1,
              "handleName": "Donald Stark",
              "orderAmount": 3,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "Donald Stark"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         },
         {
              "userId": 2,
              "handleName": "Maria Gigante",
              "orderAmount": 2,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "Donald Stark"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         },
         {
              "userId": 1,
              "handleName": "Donald Stark",
              "orderAmount": 4,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "Donald Stark"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         },
         {
              "userId": 3,
              "handleName": "John Doe",
              "orderAmount": 4,
              "others": [
                   {
                        "userId": 1,
                        "handleName": "Donald Stark"
                   },
                   {
                        "userId": 2,
                        "handleName": "Maria Gigante"
                   }
              ]
         }
    ]
}

如何实现的?

更新:我忘了我也有另一个内部数组,我也想更新。

穆罕默德·尤斯里

我们可以使用$ [identifier]运算符来更新数组中的特定对象

因此您的更新查询应类似于

db.collection.updateOne(
    { _id: <OBJECT_ID> }, // filter part, add the real objectId here
    { $set: { 'orders.$[order].handleName': 'Donald Stark' } }, // update part
    { arrayFilters: [{ 'order.userId': 1, 'order.handleName': 'John Doe' }] 
})

$ [order]仅更新与数组过滤器中的条件匹配的对象


更新资料

如果您有一个内部数组,并且需要对该内部数组中的元素执行相同的操作,则可以使用类似的方法

db.collection.updateOne(
    { _id: <OBJECT_ID> }, // filter part, add the real objectId here
    { $set: { 
        'orders.$[order].handleName': 'Donald Stark', // to set the handleName in the elements of the outer array
        'orders.$[].others.$[other].handleName': 'Donald Stark' // to set the handleName in the elements of the inner array
    } },
    { arrayFilters: [{ 'order.userId': 1, 'order.handleName': 'John Doe' }, { 'other.userId': 1, 'other.handleName': 'John Doe' }] }
)

我们过去$[]遍历了orders数组中的所有元素,然后$[other]根据数组过滤器中的新条件用于更新内部数组中的特定元素

希望能帮助到你

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Lodash从与内部值匹配的对象数组和日期数组中获取对象

来自分类Dev

返回对象数组的所有匹配元素?

来自分类Dev

更新对象内的 javascript 数组会更新对象中的所有数组

来自分类Dev

Mongo在对象内部和对象数组中查找多个匹配项

来自分类Dev

从数组中删除所有匹配的元素

来自分类Dev

在mongodb中特定于数组匹配的对象中查找与对象内部的数组匹配的文档

来自分类Dev

MongoDB更新对象内部的数组

来自分类Dev

对象内部的JSON更新数组

来自分类Dev

尝试更新对象内部对象中的数组。反应,useState

来自分类Dev

删除对象数组中的所有子项

来自分类Dev

获取对象数组中的所有参数

来自分类Dev

搜索对象数组中的所有值

来自分类Dev

Mongodb聚合查询以基于数组中对象内部的字段求和所有值

来自分类Dev

从数组中删除一个对象,然后更新所有对象的属性

来自分类Dev

使用JavaScript从与字符串键匹配的数组中获取所有对象

来自分类Dev

MongoDB-从数组中所有匹配的对象中获取字段?

来自分类Dev

Java JSON / GSON-搜索数组中的所有对象并返回匹配项

来自分类Dev

Lodash - 如何从集合中获取匹配字符串条件数组的所有对象

来自分类Dev

如何遍历JS对象及其内部的所有数组和对象,以将其与其副本进行比较?

来自分类Dev

如何遍历JS对象及其内部的所有数组和对象,以将其与其副本进行比较?

来自分类Dev

PHP 打印数组中数组的所有对象

来自分类Dev

循环遍历集合中的所有文档和每个文档中的数组,以将数组值与项目匹配

来自分类Dev

更新数组中基于模型的对象的所有实例的成员值?

来自分类Dev

Ruby更新哈希数组中的所有相同对象数据以获取JSON.parse

来自分类Dev

如何更新数组中所有对象的特定值?迅速

来自分类Dev

从category和subcategories数组获取数组中的所有元素

来自分类Dev

从category和subcategories数组获取数组中的所有元素

来自分类Dev

从表中获取与数组中的值匹配的所有值?

来自分类Dev

javascript过滤数组内部对象中的数组

Related 相关文章

  1. 1

    使用Lodash从与内部值匹配的对象数组和日期数组中获取对象

  2. 2

    返回对象数组的所有匹配元素?

  3. 3

    更新对象内的 javascript 数组会更新对象中的所有数组

  4. 4

    Mongo在对象内部和对象数组中查找多个匹配项

  5. 5

    从数组中删除所有匹配的元素

  6. 6

    在mongodb中特定于数组匹配的对象中查找与对象内部的数组匹配的文档

  7. 7

    MongoDB更新对象内部的数组

  8. 8

    对象内部的JSON更新数组

  9. 9

    尝试更新对象内部对象中的数组。反应,useState

  10. 10

    删除对象数组中的所有子项

  11. 11

    获取对象数组中的所有参数

  12. 12

    搜索对象数组中的所有值

  13. 13

    Mongodb聚合查询以基于数组中对象内部的字段求和所有值

  14. 14

    从数组中删除一个对象,然后更新所有对象的属性

  15. 15

    使用JavaScript从与字符串键匹配的数组中获取所有对象

  16. 16

    MongoDB-从数组中所有匹配的对象中获取字段?

  17. 17

    Java JSON / GSON-搜索数组中的所有对象并返回匹配项

  18. 18

    Lodash - 如何从集合中获取匹配字符串条件数组的所有对象

  19. 19

    如何遍历JS对象及其内部的所有数组和对象,以将其与其副本进行比较?

  20. 20

    如何遍历JS对象及其内部的所有数组和对象,以将其与其副本进行比较?

  21. 21

    PHP 打印数组中数组的所有对象

  22. 22

    循环遍历集合中的所有文档和每个文档中的数组,以将数组值与项目匹配

  23. 23

    更新数组中基于模型的对象的所有实例的成员值?

  24. 24

    Ruby更新哈希数组中的所有相同对象数据以获取JSON.parse

  25. 25

    如何更新数组中所有对象的特定值?迅速

  26. 26

    从category和subcategories数组获取数组中的所有元素

  27. 27

    从category和subcategories数组获取数组中的所有元素

  28. 28

    从表中获取与数组中的值匹配的所有值?

  29. 29

    javascript过滤数组内部对象中的数组

热门标签

归档