我正在使用MongoDB批量操作来插入文档.
我想做的是插入,只有在没有找到文档的情况下 - 我不想更新它(如果找到)(即upsert).
任何想法如何做到这一点?
但是,即使在这种情况下:
var obj = {
item: 'test'
}
bulk.find({ item: {$ne : obj.item}}).upsert().updateOne(obj);
bulk.execute();
Run Code Online (Sandbox Code Playgroud)
如果没有找到,这似乎实际上没有插入任何内容.
编辑:
我想更新一下以澄清一点.
我正在尝试执行两个操作,使用批量api,一个是更新,一个是插入.
该文件如下:
{
item: 'test',
categories: [{
name: 'one',
attr: 'two'
}]
}
Run Code Online (Sandbox Code Playgroud)
我想做的是如果找不到项目值,则插入obj.但是,如果找到它,那么如果categories.name
找不到,则$push
将该类别对象添加到categories
数组中.如果找到该文档并且该类别存在,则不执行任何操作.
chr*_*dam 10
您需要的是保持相同的更新操作,但更改查询.从文档:
Bulk.find(<query>).upsert().update(<update>);
Bulk.find(<query>).upsert().updateOne(<update>);
Bulk.find(<query>).upsert().replaceOne(<replacement>);
将upsert选项设置为true,如果条件不存在匹配的文档Bulk.find()
,则更新或替换操作将执行插入.如果确实存在匹配的文档,则更新或替换操作将执行指定的更新或替换.
更改查询以查找满足条件的文档:
var obj = { item: 'test' };
bulk.find(obj).upsert().updateOne({ $setOnInsert: obj });
bulk.execute();
Run Code Online (Sandbox Code Playgroud)
在上文中,如果匹配文档确实存在,则更新$setOnInsert
并不执行任何操作,因为更新操作不会导致插入,找到与查询匹配的文档.
归档时间: |
|
查看次数: |
3418 次 |
最近记录: |