4

我想知道如果更新中使用的值在数组中不存在,是否可以只用一个操作(或只用一个命令)来更新 mongodb 中的文档。

示例 mongodb 文档:

{ 
    regs : {
        someid : 12345,
        dataArray : [ { id  : 1 }, { id : 43 }, { id : 11 }]
    }
}

现在我只想更新 dataArray 中的 id 是否尚未使用,例如:

 db.regs.update({ someid : 12345 }, { $push : { dataArray : { id : INT }}})

使用上面的行可以检查是否{ id : INT }已经在我的数组中并仅在不是时才更新?

4

2 回答 2

4

在几个方面。例如,您可以使用查询匹配感兴趣的文档:

db.regs.update(
    {someid : 12345, 'dataArray.id': {$ne: INT}},
    {$push : { dataArray : {id : INT }}}
)

或使用执行更新addToSet

db.regs.update(
    {someid : 12345},
    {$addToSet : {dataArray : {id : INT }}}
)
于 2013-09-21T23:32:37.317 回答
3

正如@zero323 已经指出的那样,有一个针对特定用例的特定更新操作。从MongoDB 文档

$addToSet

仅当值不在数组中时,$addToSet运算符才将值添加到数组中。如果值在数组中,则$addToSet 返回而不修改数组。

考虑以下示例:

db.collection.update( { field: value }, { $addToSet: { field: value1 } } ); 

在这里,$addToSet追加value1到存储在 中的数组field,仅当value1它还不是该数组的成员时。

于 2013-09-22T00:14:09.840 回答