gpt4 book ai didi

node.js - Upsert 不适用于 updateOne bulkWrite v3.4

转载 作者:可可西里 更新时间:2023-11-01 10:13:34 25 4
gpt4 key购买 nike

我正在尝试批量写入一些更新,除了 upsert 之外的所有内容都在工作。
我的代码正在完美地更新所有项目,并且从未出现过任何错误。
这里的问题是使用 updateOne 的批量插入没有更新。

(这是我的代码的一个未经测试和缩短的示例,因此您可能会发现一些语法错误。希望您能理解。)

async function insert(items) {
const ops = items.map(item => ({
updateOne: {
filter: {
id: item.id,
country: item.country,
},
update: { $set: item },
upsert: true
}
}));

return await db.collection.bulkWrite(ops);
}

insert([{
id: '123',
country: 'uk',
email: 'test@test.com'
}]);

上面的代码片段没有更新缺失的项目,而是正确地更新了所有其他内容。

我正在使用 node version 6.6.0mongodb version v3.4.10 相应地,对于 3.4 ( https://docs.mongodb.com/v3.4/reference/method/db.collection.bulkWrite/ ) 的 mongodb 文档,bulkwrite 是 版本 3.2 中的新功能。

此片段来自 MongoDB 3.4 的 bulkWrite 文档。

db.collection.bulkWrite( [
{ updateOne :
{
"filter" : <document>,
"update" : <document>,
"upsert" : <boolean>
}
}
] )

这是同一文档中的示例。

{
updateOne: {
"filter": { "char": "Eldon" },
"update": { $set: { "status": "Critical Injury" } }
}
}

我已经尝试使用完全相同的数据直接在 mongo 终端界面中进行正常更新,并正确更新项目。

db.collection.update({ id: '123', country: 'uk' }, { $set: { id: '123', country: 'uk', email: 'test@test.com' } }, { upsert: true });

最佳答案

const ops = items.map(item => 
({ updateOne: {
filter: { id: item.id, country: item.country},
update: { $set: {item} }, upsert: true }
}));

$set 按语法会期望 { id: item.id, country: item.country} 而不仅仅是 id: item.id, country: item .country 被通过。

关于node.js - Upsert 不适用于 updateOne bulkWrite v3.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47831967/

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