Программно переключать логическое значение с помощью собственного драйвера Mongodb
Я пытаюсь выяснить, как переключить логическое значение "active" в примере с 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 }}
, Как бы я проверить значение и вернуть противоположное?
Спасибо
1 ответ
На данный момент в MongoDB нет оператора $ toggle, поэтому сделать такую операцию переключения невозможно. Но есть какой-то обходной путь для этой функциональности. Прежде всего вам нужно заменить логическое число на число. Тогда вместо того, чтобы пытаться заменить его на противоположное значение, вы должны просто увеличивать его каждый раз.
todos.findOneAndUpdate({_id: ObjectId(args.id)}, {$inc:{ active: 1}});
Итак, вы видите, что каждый раз он будет увеличиваться на $ 1, и это означает, что он всегда будет переключаться с четного числа на нечетное.
Следующим шагом является изменение вашего запроса get следующим образом:
todos.find({'active' : { '$mod' : [ 2, 1 ] });
Он вернет все документы, в которых поле "active" теперь имеет нечетное число, которое, например, можно считать истинным, или наоборот.