在mongoose中,如果该值为null,则不应将其添加到MongoDB中

时间:2018-08-13 05:10:19

标签: node.js angular mongodb mongoose

您好,我正在使用Angular 6将“ PUT”请求发送到服务器端(node.js),我有多个PUT请求,问题是

如果我从电子邮件中收到了放置请求,则电话号码将更新为null;如果我从电话中得到了放置请求,则更新后的电子邮件将更改为null。

我想尝试如果该值为null,则不应在MongoDB中对其进行更新。怎么做,请有人帮我。这是我的代码。

用于更新电子邮件的角度PUT请求。

  public updatedEmail() {
let userData = {
  'providerID': '44',
  'firstName': this.info.firstName,
  'alternate_email': this.email,
};

let xhr = new XMLHttpRequest();
xhr.open('PUT', 'http://localhost:3000/updateprofile');
xhr.setRequestHeader('content-Type', 'application/json');
xhr.send(JSON.stringify(userData));

console.log('data sent');
}

PUT请求更新电话号码

  public updatedPhone() {
let userData = {
  'providerID': '44',
  'firstName': this.info.firstName,
  'workPhone': this.workNumber,
  'homePhone': this.homeNumber,
  'mobilePhone': this.mobileNumber
};

let xhr = new XMLHttpRequest();
xhr.open('PUT', 'http://localhost:3000/updateprofile');
xhr.setRequestHeader('content-Type', 'application/json');
xhr.send(JSON.stringify(userData));
console.log('data sent');
}

我将Node.js用作服务器端,这是我的用户详细信息架构:

var UserDetailSchema = mongoose.Schema({
providerID: {
    type: String
},

firstName: {
    type: String
},

alternate_email: {
    type: String,
    set: deleteEmpty
},

workNumber: {
    type: String
},

homeNumber: {
    type: String
},

mobileNumber: {
    type: String
},
}, {timestamps: true});
var UserDetail = module.exports = mongoose.model('UserDetail', 
UserDetailSchema);
module.exports = UserDetail;

我正在制作router.put的路由,因此它根据提供者ID来检查数据库并更新数据库(如果存在)或创建数据库(如果不存在)。

router.put('/updateprofile', function (req, res, next) {
console.log(req.body)
var query = { providerID: req.body.providerID},
    update = { alternate_email: req.body.alternate_email, homeNumber: req.body.homeNumber, workNumber: req.body.workNumber, mobileNumber: req.body.mobileNumber },
    options = { upsert: true };

UserDetail.findOneAndUpdate(query, update, options, function (error, result) {
    if (error) throw (err);
});
});

预先感谢

1 个答案:

答案 0 :(得分:0)

首先根据this的帖子,如果您的端点仅更新了应使用PATCH的一部分数据

要解决您的问题,您可以检查该字段是否存在并且不为空,然后将其添加到更新对象中

const update = {};

if(req.body.alternate_email) update.alternate_email = req.body.alternate_email;
if(req.body.req.body.homeNumber) update.homeNumber = req.body.homeNumber;
// And so on