我有一个我想要插入到MongoDB集合中的对象数组,但是我想先检查集合中是否已存在每个项目。如果它不存在则插入它,如果它存在则不要插入它。
经过一些谷歌搜索后,看起来我最好使用update方法,并将upsert属性设置为true。
如果我将它传递给单个项目,以及如果我遍历我的数组并一次插入一个项目,这似乎工作正常,但是我不确定这是否是正确的方法,或者它是否最有效。这就是我现在正在做的事情:
var data = [{}, {}, ... {}];
for (var i = 0; i < data.length; i++) {
var item = data[i];
collection.update(
{userId: item.id},
{$setOnInsert: item},
{upsert: true},
function(err, result) {
if (err) {
// Handle errors here
}
});
}
迭代我的数组并逐个插入它们是最有效的方法,还是有更好的方法?
答案 0 :(得分:2)
我可以在这里看到两个选项,具体取决于您的完全需求:
$setOnInsert
可以缓解此问题。ordered
选项设置为false
),以便MongoDB继续插入其余文档如果其中一个出错。 关于性能,使用第二个选项MongoDB将使用索引来查找可能的重复。所以很有可能这会表现得更好。