Mar*_*ius 5 database upsert mongodb
我想添加一个文件,如果它不存在,否则添加一个元素到其中一个子文档.
db.test.update(
{
name : 'Peter'
},
$setOnInsert : {
name : 'Peter',
visits: { 'en' : ['today'], 'us' : [] }
},
$push : {
visits.en : 'today'
},
{ upsert : true }
)
Run Code Online (Sandbox Code Playgroud)
如果Peter存在,则向其visists.en或visists.us数组添加元素.否则,为...创建一个文档Peter.该文档的格式visits应包含当前元素('today').
我的问题是我有"have conflicting mods in update".即(afaik),我不能在一个查询中写两件事.但我怎样才能解决这个难题呢?
您可以在没有$setOnInsert操作员的情
db.test.update(
{
name : 'Peter'
},
{
$push : {
"visits.en" : 'today'
}
},
{ upsert : true }
)
Run Code Online (Sandbox Code Playgroud)
如果Peter存在,则元素'today'将添加到其visits.en数组中.否则,将为Peter创建一个带有visits对象的文档,该文档将包含en带'today'元素的数组.
我认为,由于您visits在两个操作($setOnInsert和$push)中使用相同的property(),因此发生了错误.
您仍然可以使用$setOnInsertbut when$setOnInsert和$pushdoes not update 在前面提到的相同字段中。
注意:$addToSet如果您不想在数组中出现重复的值,我们会使用
db.test.update(
{
name : 'Peter'
},
{
$setOnInsert: {name : 'Peter'},
$addToSet: {"visits.en": 'today'} // or $push
},
{upsert: true})
Run Code Online (Sandbox Code Playgroud)