我试图弄清楚如何切换"活跃"的布尔值。在示例中,从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传递给活动{ $set: { active: true }}
来直接设置它。我如何测试该值并返回相反的值?
由于
答案 0 :(得分:1)
目前MongoDB中没有$ toggle运算符,因此无法使这种切换操作成为原子。 但是这种功能有一些解决方法。 首先,你需要用数字替换你的布尔值。 然后,不要试图用相反的值替换它,而应该每次都增加它。
todos.findOneAndUpdate({_id: ObjectId(args.id)}, {$inc:{ active: 1}});
所以你看到每次它会以$递增1,这意味着它总是从<偶数切换到奇数。
下一步是修改你的&#39; get&#39;以这种方式查询:
todos.find({'active' : { '$mod' : [ 2, 1 ] });
它会返回所有活跃的文件。字段现在是奇数,您可以将其视为 true ,反之亦然。