Javascript MongoDB批量保存等价物?

Javascript MongoDB批量保存等价物?,javascript,mongodb,Javascript,Mongodb,我是一个mongodb noob,在尝试使用创建一个与大容量保存等效的(因为我找不到大容量保存操作)时遇到了一些困难。简单地说,给定一系列文档: [{ _id:1, name:"a" ... }, { _id:1, name:"b" ... } ... ] 我想批量插入数组中的文档,使用_id属性作为比较字段来确定哪些传入记录与mongodb中已有的记录等效。在伪代码中,我希望mongodb按如下方式大容量上传: if(incomingDocument._id == existingDocum

我是一个mongodb noob,在尝试使用创建一个与大容量保存等效的(因为我找不到大容量保存操作)时遇到了一些困难。简单地说,给定一系列文档:

[{ _id:1, name:"a" ... }, { _id:1, name:"b" ... } ... ]
我想批量插入数组中的文档,使用_id属性作为比较字段来确定哪些传入记录与mongodb中已有的记录等效。在伪代码中,我希望mongodb按如下方式大容量上传:

if(incomingDocument._id == existingDocument._id){
  update(incoming) // overwrite existing document with entire incoming document
} else {
  insert(incoming)
}
理想情况下,我希望向mongo传递一个数组和一个比较器,而不是为每个文档排队一个单独的批量操作

如何使用
Bulk.find().upsert().update()实现这一点或类似?
(或者,是否存在未记录的批量保存()操作?)

谢谢大家!

如果不存在与之匹配的文档,则upsert选项设置为true Bulk.find()条件,然后是更新或替换 操作执行插入。如果存在匹配的文档,则 更新或替换操作执行指定的更新或替换 替换

但您需要对您的收藏进行循环:

var bulk = db.items.initializeUnorderedBulkOp();
myDocumnets.forEach(function(doc) {
  bulk.find({_id: doc._id}).upsert().replaceOne(doc);
});
bulk.execute({w: 1, j: true}, function (err, result) {
  if (result.isOk()) {
    ...
}
多多少少,我很抱歉,我现在不能测试它。我也无法说明它在大量文档上的行为

更新


我按照科林的建议修改了代码。

我在问题中提到了save()。问题是在mongodb的大容量模式()中获得类似的功能。此外,saveapi一次只接收一个文档,有没有办法将其传递给数组?@Colin抱歉,我误解了你的问题。我认为没有
Bulk.save()
操作。不用担心。有没有办法用bulk-upsert解决这个问题?@Colin看到我的更新了,但我很确定它需要一些修改。使用
bulk.find({u-id:doc.\u-id}).upsert().replaceOne(doc)forEach循环中