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

标签 mongodb

我想知道如果更新中使用的值不存在于数组中,是否可以只用一个操作(或一个命令)来更新 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 } 是否已经在我的数组中并且仅当它不在时才更新?

最佳答案

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

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

或使用 addToSet 执行更新:

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

关于mongodb - 如果使用 mongodb 的数组中不存在值,则更新的一项操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938681/

相关文章:

ruby-on-rails - 如何 mongoid 项目 <=has_many=> 用户

python - django 和 mongodb 是否使迁移成为过去?

regex - 删除 MongoDB 集合中字符串字段值中的所有空格

mongodb - mongodb中的多重分组

node.js - Handlebars : query and sum

mongodb - 如何连接到 Meteor 中的外部 MongoDB 实例?

mongodb - E : Unable to locate package mongodb-org

arrays - $ concatArrays仅支持数组,不支持对象

multithreading - 为什么我的多线程插件比单线程插件性能更好?

javascript - 聚合匹配管道不等于 MongoDB