gpt4 book ai didi

node.js - MongoDB insertMany 并跳过重复项

转载 作者:行者123 更新时间:2023-12-04 12:05:47 26 4
gpt4 key购买 nike

我正在尝试 insertMany() 项目进入我的 Mongo 数据库,但我想跳过重复的 ID。
我正在使用 Node.js mongodb .

我有一些数据:

const myExampleData = [
{_id:'someId1', name:'I am example'},
{_id:'someId2', name:'I am second example'}
];

我想像这样插入它们:

dbo.collection(collectionName).insertMany(myExampleData).catch(err=>{
console.error(err);
});

让我们假设 someId1已经存在。我不想覆盖它。我只想跳过它。在当前情况下它不插入 someId2 .一旦抛出重复的异常,它就会停止。

有没有办法如何 insertMany 并跳过重复项?

可能的问题重复。

我找到了线程 MongoDB insert without duplicates建议在哪里使用 update() upsert 而不是 insert() 这对一件元素来说可能没问题。但是很多项目呢?据我所知 updateMany() 将使用相同的值更新所有过滤的行,但我想插入不同的值。

最佳答案

检查您的声明:

Lets suppose that someId1 already exists. I don't want to override it. I just want to skip it.



所以你只是想跳过重复的文档,因为你的意图不是用最新的数据更新重复的文档 - 所以没有必要使用 .update() , 您仍然可以使用 .insertMany() 执行此操作通过传递标志 ordered在查询选项中:

订购:可选的。一个 bool 值,指定是否 mongod 实例应该执行有序或无序插入。默认为 .
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
ordered: <boolean>
}
)

您的代码:
dbo.collection(collectionName).insertMany(myExampleData, {ordered : false }).catch(err=>{
console.error(err);
})

好像你在检查 _id它将具有默认的唯一索引并且任何传入的重复项实际上都会引发错误,使用 ordered : false我们正在使这个插入操作无序,因为我们跳过了所有传入的重复项并继续进行,而实际上不会抛出任何错误。

关于node.js - MongoDB insertMany 并跳过重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61480444/

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