我有以下架构
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
这样做的正确方法是什么?
答案 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
}
)
如果您通过唯一的域密钥定位多个文档,我不知道有一种方法可以在单个批处理命令中执行此操作。