【问题标题】:how to replace old all documents with new documents in mongodb?如何用 mongodb 中的新文档替换旧的所有文档?
【发布时间】:2021-07-30 10:28:54
【问题描述】:

我的收藏中有一个包含 50000 个文档的 json 数据列表。

{
  domainName: "abc.com",
  link: "https://example.com",
  price: "$33"
},
{
  domainName: "sdf.com",
  link: "https://example.com",
  price: "$33"
}

我是这样插入的

collection.insertMany(data)

data是50000个列表的数组

我想创建一个集合并将其插入数据库。现在我必须插入新的 json 数据,并希望删除旧数据(500000)和同一集合中的更新数据。 每次我用

插入新文档时
collection.insertMany(data)

新文档与旧文档合并,文档数增加到 100000。 我只想用新文档替换所有文档

我怎样才能在一个命令中做到这一点?

【问题讨论】:

  • 您可以删除收藏并创建一个同名的新收藏。
  • 我想在一个命令中完成。像删除和插入文档或只是替换所有文档。我该怎么做?
  • 使用 bulkWrite 以便在单个查询中使用。检查我更新的答案。

标签: mongodb mongodb-query


【解决方案1】:

您可以在 mongodb 中使用bulkWrite 选项

试试这个,

let ops = [];
    ops.push({ deleteMany: { "filter": {} } },)
    let data = [{
        domainName: 'abc.com',
        link: 'https://example.com',
        price: '$33'
    },
    {
        domainName: 'sdf.com',
        link: 'https://example.com',
        price: '$33'
    }]
    data.forEach(element => {
        ops.push({ insertOne: { "document": element } },)
    });

    let x = await db1.bulkWrite(
        ops,
        { ordered: true }
    );

保留ordered:true,用于维护执行顺序。否则deleteMany 可能会在最后执行。这将 delete all 集合中的文档和 insert 全部。 您也可以使用updateMany 操作 https://docs.mongodb.com/manual/reference/method/db.collection.bulkWrite/ 你可以使用

  db.collection.bulkWrite(
       [
          { insertOne : <document> },
          { updateOne : <document> },
          { updateMany : <document> },
          { replaceOne : <document> },
          { deleteOne : <document> },
          { deleteMany : <document> }
       ],
       { ordered : false }
    )

bulkWrite 中的上述操作。

【讨论】:

  • 这作为数据是一个数组。但我的数据是一个大小为 500mb+ 的 JSON 对象。我正在通过 JSONStream 上传它。我怎样才能做到这一点 ?谢谢
  • 当我使用 insertMany 时,不推荐使用 insertMany。 (node:19606) [MONGODB DRIVER] Warning: bulk operation insertMany` 已被弃用;改用多个insertOne ops`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
  • 2022-01-17
  • 2018-07-15
  • 1970-01-01
  • 2021-06-26
相关资源
最近更新 更多