gpt4 book ai didi

mongodb - 在MongoDB中插入或更新许多文档

转载 作者:行者123 更新时间:2023-12-01 10:21:39 26 4
gpt4 key购买 nike

是否可以通过单个查询在MongoDB中插入或更新/替换多个文档?

假定以下集合:

[
{_id: 1, text: "something"},
{_id: 4, text: "baz"}
]

现在,我想添加多个文档,其中某些文档可能已经在集合中。如果文档已在集合中,我想更新/替换它们。例如,我要插入以下文档:
[
{_id:1, text: "something else"},
{_id:2, text: "foo"},
{_id:3, text: "bar"}
]

查询应插入带有 _id 2和3的文档。它还应该带有 _id 1的文档进行更新/替换。在此过程之后,集合应如下所示:
[
{_id:1, text: "something else"},
{_id:2, text: "foo"},
{_id:3, text: "bar"},
{_id:4, text: "baz"}
]

一种方法可能是使用 insertMany :
db.collection.insertMany(
[ {...}, {...}, {...} ],
{
ordered: false,
}
)

如果发生重复,该查询将发出 writeErrors,其中包含一个对象数组,该对象数组包含未能插入的文档的索引。我可以浏览它们并更新它们。

但是该过程很麻烦。有没有一种方法可以在一个查询中插入或更新/替换许多文档?

最佳答案

here所说,要做你需要的事情,你可以把这样的东西放进去

script.js

( *警告:未经测试的代码)

use YOUR_DB
var bulk = db.collection.initializeUnorderedBulkOp();
bulk.find( { _id : 1 } ).upsert().update( { $set: { "text": "something else" } } );
bulk.find( { _id : 4 } ).upsert().update( { $set: { "text": "baz" } } );
bulk.find( { _id : 99 } ).upsert().update( { $set: { "text": "mrga" } } );
bulk.execute();

并运行它

mongo
我必须这样做,因为由于限制,我尝试更新/插入1000多个文档的任何操作均不起作用。

写命令最多可以接受1000个操作。 mongo shell中的Bulk()操作和驱动程序中的类似方法没有此限制。

source

关于mongodb - 在MongoDB中插入或更新许多文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40244739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com