使用 Mongodb 本机驱动程序以编程方式切换布尔值

Programmatically Toggle Boolean Value with Mongodb Native Driver

我试图弄清楚如何根据文档中存在的值将示例中 "active" 的布尔值从 true 切换为 false 或将 false 切换为 true。因此,如果它是 true,将其更改为 false,如果它是 false,则将其更改为 true。示例数组。

[{ _id: 59cb78434436be173e038aaa, active: true, title: 'One' },
{ _id: 59cb78434436be173e038aab, active: false, title: 'Two' },
{ _id: 59cb78434436be173e038aac, active: false, title: 'Three' }]

const todos = db.collection('todos');

const active = !active;
await todos.findOneAndUpdate({ _id: ObjectID(args.id) },
{ $set: { active: active } }, function(err, doc) {
                if (err) {
                    throw err;
                } else {
                    console.log('Updated');
                }
            });

我无法通过将 true 或 false 传递给 active { $set: { active: true }} 来直接设置它。我将如何测试该值和 return 相反的值?

谢谢

目前 MongoDB 中没有 $toggle 运算符,所以不可能使这种切换操作原子化。 但是此功能有某种解决方法。 首先,您需要用数字替换布尔值。 然后,与其尝试用相反的值替换它,不如每次都增加它。

todos.findOneAndUpdate({_id: ObjectId(args.id)}, {$inc:{ active: 1}});

所以你看到每次它都会增加 1,这意味着它总是 从偶数切换 到奇数。

下一步是以这种方式修改您的 'get' 查询:

todos.find({'active' : { '$mod' : [ 2, 1 ] });

它将 return 所有 'active' 字段现在为奇数的文档,例如,您可以将其视为 true,反之亦然。