如果使用 mongodb 数组中不存在值,则执行一项更新操作

Mag*_*ior 5 mongodb

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

示例 mongodb 文档:

{ 
    regs : {
        someid : 12345,
        dataArray : [ { id  : 1 }, { id : 43 }, { id : 11 }]
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我只想更新 dataArray 内的 id 尚未使用的情况,例如:

 db.regs.update({ someid : 12345 }, { $push : { dataArray : { id : INT }}})
Run Code Online (Sandbox Code Playgroud)

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

zer*_*323 5

有几种方式。例如,您可以使用查询匹配感兴趣的文档:

db.regs.update(
    {someid : 12345, 'dataArray.id': {$ne: INT}},
    {$push : { dataArray : {id : INT }}}
)
Run Code Online (Sandbox Code Playgroud)

或使用以下命令执行更新addToSet

db.regs.update(
    {someid : 12345},
    {$addToSet : {dataArray : {id : INT }}}
)
Run Code Online (Sandbox Code Playgroud)