猫鼬|批量插入和更新(如果已存在)

时间:2018-03-29 07:27:36

标签: node.js mongoose

我有以下架构

const domain = new Schema({
   created: { type: Date, default: Date.now },
   last_update: { type: Date, default: Date.now },
   domain: String,
});
架构中的

索引为domain

我想为此系列进行批量插入。

但如果文档存在,我只希望它更新(而不是双重插入)

例如:如果集合具有以下域:

gmail.com, yahoo.com, msn.com

我想插入并更新以下数据:

let data = [{domain:"gmail.com", test: true}, {domain:"fake.com", test: false}]

我希望该集合能够添加fake.com并更新gmail.com

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您将db.collection.update()upsert选项一起使用:

  

Upsert:如果设置为true,则在no时创建一个新文档   文档符合查询条件。默认值为false,即   找不到匹配项时不插入新文档。

Domains.update( // Or db.domains with mongodb directly
   {
      domain: 'www.something.com'
   },
   {
      domain: 'www.something.com'
   },
   {
     upsert: true
   }
)

如果您通过唯一的域密钥定位多个文档,我不知道有一种方法可以在单个批处理命令中执行此操作。