【问题标题】:Mongo - How to update multiple documents with different value in single query?Mongo - 如何在单个查询中更新具有不同值的多个文档?
【发布时间】:2019-01-18 21:20:07
【问题描述】:

我想编写一个查询以在单个查询中更新多个文档,请建议我可能的方法。

以下是我的 mongo 文档。

[
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204cd"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "ABC",
        "userType": "admin"
    },
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204ce"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "DEF",
        "userType": "admin"
    },
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204cf"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "GHI",
        "userType": "admin"
    },
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204d0"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "XYZ",
        "userType": "admin"
    }
]

我已经在代码中跟踪更新的对象,我如何使用查询在数据库中更新它。

[
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204cd"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "ABC123",
        "color":"red"
        "userType": "admin"
    },
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204ce"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "DEF123",
        "color":"blue"
        "userType": "admin"
    },
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204cf"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "GHI123",
        "color":"green"
        "userType": "admin"
    },
    {
        "_id" : ObjectId("5b0f0a2ca1f6633032c204d0"),
        "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
        "name" : "XYZ123",
        "color":"rgb(14,256,12, 1)"
        "userType": "admin"
    }
]

请给我建议正确的方法,或者我们可以做到吗?

【问题讨论】:

  • 你尝试过什么?
  • 没什么,我试过updateManyupsert: true
  • 您传递什么类型的数组来更新文档?更新您的问题并发布您想要更新多个文档的有效负载数组
  • 来自与输出对象相同。只想比较_id并更新所有数据
  • 也试试我的这个答案stackoverflow.com/questions/51801033/…

标签: mongodb mongoose mongodb-query


【解决方案1】:

在mongodb中基本需要bulkWrite操作

const array = [
  {
    "_id" : ObjectId("5b0f0a2ca1f6633032c204cd"),
    "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
    "name" : "ABC123",
    "color":"red"
    "userType": "admin"
  },
  {
    "_id" : ObjectId("5b0f0a2ca1f6633032c204ce"),
    "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
    "name" : "DEF123",
    "color":"blue"
    "userType": "admin"
  },
  {
    "_id" : ObjectId("5b0f0a2ca1f6633032c204cf"),
    "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
    "name" : "GHI123",
    "color":"green"
    "userType": "admin"
  },
  {
    "_id" : ObjectId("5b0f0a2ca1f6633032c204d0"),
    "parent_id" : ObjectId("5b0f09e1a1f6633032c204cc"),
    "name" : "XYZ123",
    "color":"rgb(14,256,12, 1)"
    "userType": "admin"
  }
]

最后的查询

Model.bulkWrite(
  array.map((data) => 
    ({
      updateOne: {
        filter: { _id: data._id },
        update: { $set: data }
      }
    })
  )
})

【讨论】:

  • @TBE 用于查询或array中的上述数据?
  • 对于查询,您有一个不需要的右大括号。您的最后一行应为 ) 而不是 })
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2014-10-29
  • 1970-01-01
  • 2017-02-14
相关资源
最近更新 更多