gpt4 book ai didi

javascript - MongoDB 使用新文档数组更新文档数组

转载 作者:行者123 更新时间:2023-12-03 03:15:13 25 4
gpt4 key购买 nike

可以插入对象数组,但无法更新它们。您必须将它们移除然后再插入。我不想先删除然后插入它们,因为如果删除顺利但插入时出现错误,数据就会丢失。如何正确更新集合中的数组(所有文档)?

插入文档数组:

collection.insert(arrToInsert, function(err, results){
console.log(results.ops);
});

更新插入的数组(不好):

collection.remove({}, function(err){
collection.insert(arrUpdated, function(err, result) {
console.log(results.ops);
});
});

我尝试过使用 collection.update,但这不允许使用数组。

编辑:例如:插入这个数组:

[
{_id:0,name:"Harry"},
{_id:1,name:"Jacob"},
{_id:2,name:"Bob"}
]

然后,将其更改为:

[
{_id:0,name:"Dennis"},
{_id:1,name:"Peter"},
{_id:2,name:"Ghandi"}
]

我的实际情况有点复杂,因为数组有另一个键/值对,并且可以通过多种方式进行更改。

最佳答案

你的意思是.bulkWrite() ,它允许在单个批量请求中对同一集合进行多个更新操作(插入/更新/删除)。它实际上是现代驱动程序在使用文档数组调用 .insert().insertMany() 时真正调用的内容。

您的新更新将是:

var arrToUpdate = [
{_id:0,name:"Dennis"},
{_id:1,name:"Peter"},
{_id:2,name:"Ghandi"}
];

collection.bulkWrite(
arrToUpdate.map( d => ({
"replaceOne": {
"filter": { "_id": d._id },
"replacement": d
}
})),
function(err,result) {
console.log(result)
}
)

哪里replaceOne本质上是一个“更新”,不使用任何修饰符,例如 $set

重点是,就像使用数组或 .insertMany().insert() 一样,数据库仅接收一个请求,并且响应,但该请求中有多个操作。

关于javascript - MongoDB 使用新文档数组更新文档数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46799598/

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