首页 > 解决方案 > 如何用猫鼬在mongodb中反转布尔值

问题描述

我有一个数据如下。

[
  {
    "id": 1,
    "exist": true
  },
  {
    "id": 2,
    "exist": false
  },
  {
    "id": 3,
    "exist": false
  }
]

只有一个对象可以存在为真。因此,当我 findOneAndUpdate({_id:2}),{exist:true}) 时,我希望使用聚合等在一个查询中自动将“id:1”的存在更改为 false。
你能推荐一些想法吗?非常感谢您阅读我的问题。

标签: mongodbmongoose

解决方案


从 MongoDB 4.2 开始,您可以使用聚合管道进行更新,因此您可以执行以下操作:

db.your_collection.update(
  {
    $or: [
      {
        id: 2,
        exist: false
      },
      {
        id: {$ne: 2},
        exist: true
      }
    ]
  },
  [{$set: {exist: {$eq: [ "$exist", false ] }}}], 
  {multi: true}
)

解释:

  • 过滤器将查找具有您想要的 id 但不存在或没有 id 但存在为 true 的记录。在这种情况下,它会发现:

    [
      {
        "id": 1,
        "exist": true
      },
      {
        "id": 2,
        "exist": false
      }
    ]
    
  • 找到记录的更新反向exist字段。


推荐阅读