如果文档不存在,我想添加一个文档,否则将一个元素添加到其中一个子文档中。
db.test.update(
{
name : 'Peter'
},
$setOnInsert : {
name : 'Peter',
visits: { 'en' : ['today'], 'us' : [] }
},
$push : {
visits.en : 'today'
},
{ upsert : true }
)
如果 Peter
存在,则将一个元素添加到其 visists.en
或 visists.us
数组中。否则,为 Peter
创建一个文档。此文档应具有 visits
格式,其中应包含当前元素 ('today'
)。
我的问题是我有 “更新中有冲突的模组”
。
IE。 (afaik),我不能在一个查询中写两件事。然而,我该如何解决这个困境呢?
最佳答案
您可以在没有 $setOnInsert
运算符的情况下实现它。
db.test.update(
{
name : 'Peter'
},
{
$push : {
"visits.en" : 'today'
}
},
{ upsert : true }
)
如果 Peter 存在,元素 'today'
将被添加到其 visits.en
数组中。否则,将为 Peter 创建一个带有 visits
对象的文档,该文档将包含数组 en
和 'today'
元素。
而且我认为,发生该错误是因为您在两个操作($setOnInsert
和 $push
)中使用了相同的属性(visits
)。
关于MongoDB setOnInsert 并推送(如果已经存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805026/