繁体   English   中英

如何在更新操作中保留 MongoDB 中的字段而不进行任何更改?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM