如何根据以前的值更新 MongoDB 文档?

use*_*509 5 javascript mongodb node.js

抱歉,如果这是非常基本的,但我是 mongodb 新手并且无法找到答案:

假设我正在执行以下操作:

db.collection("bugs").updateOne({ _id: searchId }, { $set: { "fixed": true }}
Run Code Online (Sandbox Code Playgroud)

如何将“固定”设置为与“固定”的最后一个值相反?没有任何额外的查询?就像是{ $set: { "fixed": !fixed }}

Utk*_*pta 4

目前,通过坚持存储布尔值的想法,在 MongoDB 中仅通过一次操作来实现这一点实际上是不可能的(在 MongoDB 的未来版本中可能是可能的)。但是,有一种解决方法可以通过存储位(0 或 1)来表示 true 或 false 而不是布尔值,并对 MongoDB 中的位执行按位异或运算,如下所示:

db.collection("bugs").updateOne(
  {
    _id: searchId
  },
  { 
    $bit : {
     fixed: {
       xor: NumberInt(1)
     }
    }
  }
)
Run Code Online (Sandbox Code Playgroud)

请注意,您还必须在固定属性中存储01来表示,因为MongoDB 默认将所有数字视为浮点值。NumberInt(0)falseNumberInt(1)true