[英]How to leave a field in MongoDB without any changes in an update operation?
我有一个 object 来更新 MongoDB 中的文档,例如:
let data = {"id": 123, "user": "abc", "is_invalid": "true"}
当"is_invalid"
字段第一次变为真时 - 我正在添加一个"invalid_date"
字段。 如果"is_invalid": "false"
我删除它。 如果文档已经有"is_invalid": "true"
和"invalid_date"
,并且我让 object 再次更新,我不希望 "invalid_date" 改变,但保持不变。 我该怎么做?
这是我的代码:
let id = data.id;
delete data.id;
let update = {$set: data};
if (user.is_invalid) {
update.$set.inactivate_time = new Date(Date.now());
} else {
update.$unset = {
inactivate_time: 1
};
}
mongo.collection('users').update(
{
id: id
},
update, done);
如果您已经可以访问 object,我觉得您需要在代码中添加额外的条件。 让我们考虑一个场景,您将在 object 中有真实和日期,然后您可以执行以下操作。
let data = {"id": 123, "user": "bcd", "is_invalid": "true", "invalid_date":"2021-03-10"}
//you can have a first condition as
if(data.is_invalid && data.invalid_date){
return; //simply return
}
...
...
//Rest of the code
..
..
您需要做这样的事情,因为更新查询找不到它只是更新/覆盖接收数据。
const user = await mongo.collection('users').findOne({id: id});
if(!user)
throw 'No user found'
if(user.is_invalid && !user.invalid_date){
user.invalid_date = getting.invalid_date;
}
await user.save();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.