如果文档不存在,我想添加一个文档,否则将一个元素添加到其中一个子文档中。
db.test.update(
{
name : 'Peter'
},
$setOnInsert : {
name : 'Peter',
visits: { 'en' : ['today'], 'us' : [] }
},
$push : {
visits.en : 'today'
},
{ upsert : true }
)
如果Peter
存在,请将元素添加到其visists.en
或visists.us
数组中。否则,为 Peter
创建一个文档。此文档应具有包含当前元素 ( 'today'
) 的visits
格式。
我的问题是我有"have conflicting mods in update"
.即(afaik),我不能在一个查询中写入两件事。然而,我该如何解决这一困境呢?
你可以在没有运算符的情况下实现它$setOnInsert
。
db.test.update(
{
name : 'Peter'
},
{
$push : {
"visits.en" : 'today'
}
},
{ upsert : true }
)
如果 Peter 存在,元素 'today'
将被添加到其visits.en
数组中。否则,将为Peter创建一个带有visits
对象的文档,该对象将包含带有'today'
元素的数组en
。
我认为,该错误是由于您在两个操作($setOnInsert
和$push
)中使用相同的属性(visits
)而发生的。
您仍然可以使用 $setOnInsert
但是当 $setOnInsert
和 $push
没有在前面提到的相同字段中更新时。
注意:如果您不希望数组中有重复的值,我们会使用$addToSet
db.test.update(
{
name : 'Peter'
},
{
$setOnInsert: {name : 'Peter'},
$addToSet: {"visits.en": 'today'} // or $push
},
{upsert: true})