如何用猫鼬在mongodb中反转布尔值

时间:2019-12-17 06:52:04

标签: mongodb mongoose

我的数据如下。

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

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

1 个答案:

答案 0 :(得分:1)

从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字段。