【问题标题】:How to update multiple documents in mongodb using one query from an array of objects如何使用对象数组中的一个查询更新 mongodb 中的多个文档
【发布时间】:2021-07-24 12:10:39
【问题描述】:

我有以下对象数组...

[
    {
        _id: 'dfjkldsjfkldjas',
        name: 'will'
    },
    {
        _id: 'fdsfdakjdhfaskh',
        name: 'bob'
    },
    {
        _id: 'fdsfdasfdfewrfq',
        name: 'tom'
    }
]

有没有一种方法可以在 mongodb 集合中搜索与这些 _id 匹配的文档,然后在一个查询中 $set 文档中的名称?也许使用 updateMany?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您可以使用bulkWrite 来实现此目的。首先映射您的数组并像这样转换数据:

    const data = [
        {
            _id: 'dfjkldsjfkldjas',
            name: 'will'
        },
        {
            _id: 'fdsfdakjdhfaskh',
            name: 'bob'
        },
        {
            _id: 'fdsfdasfdfewrfq',
            name: 'tom'
        }
    ]
    
    const bulkData = data.map(item => (
      {
         updateOne: {
            filter: { _id: item._id },
            update: { $set: { name: item.name }}
         }
      })
    );
    

    然后你使用bulkWrite的方法保存多个数据。

    db.yourCollection.bulkWrite(bulkData);
    

    您也不必对每个条目使用相同的数据库操作,您可以在同一块上使用不同的数据库操作,例如 deleteOnereplaceOneinsertOne 等。

    您可以在这里查看更多信息:https://docs.mongodb.com/manual/reference/method/db.collection.bulkWrite/

    【讨论】:

      【解决方案2】:

      试试这个更新批量数据

       const data = [
              {
                  _id: 'dfjkldsjfkldjas',
                  name: 'will'
              },
              {
                  _id: 'fdsfdakjdhfaskh',
                  name: 'bob'
              },
              {
                  _id: 'fdsfdasfdfewrfq',
                  name: 'tom'
              }
          ]
          const bulkData = data.map(item => (
              {
                  updateOne: {
                      filter: { _id: item._id },
                      update: { $set: { name: item.name } },
                      upsert: true 
                  }
              })
          );
      await db1.bulkWrite(bulkData, { ordered: false, upsert: true });
      

      【讨论】:

        猜你喜欢
        • 2019-02-21
        • 2018-09-05
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-13
        相关资源
        最近更新 更多