gpt4 book ai didi

node.js - 替换mongodb文档而不附加属性

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:50 26 4
gpt4 key购买 nike

我觉得我这里有一个奇怪的。

我在express中使用mongoose来更新集合中的文档。该模型如下所示:

var customers = new Schema({
companyName: String,
addressLine1: String,
addressLine2: String,
city: String,
province: String,
postal: String,
businessPhone: String,
contacts: [{
firstName: String,
lastName: String,
title: String,
phone: String,
email: String
}],
custCode: Number,
rep: String
});

上面是一个新模型,因为旧模型看起来像这样:

var customers = new Schema({
companyName: String,
firstName: String,
lastName: String,
addressLine1: String,
addressLine2: String,
city: String,
province: String,
postal: String,
businessPhone: String,
email: String
custCode: Number,
rep: String
});

不同之处在于,我分解了一个“联系人”数组,以便将来可以添加更多联系人。集合中的现有文档具有旧的模型样式,更新对象具有新的模型。

当我运行以下代码时,文档最终会附加联系人数组,但也会保留名字和姓氏、电子邮件等,而不是按照新模型的规则丢失它。

var conditions = {custCode:req.body.customer.custCode}
, update = req.body.customer
, options = {upsert: false, new: true};

mongoose.model('customers').findOneAndUpdate(conditions, update, options, callback);
function callback (err, doc) {
if(err) {
console.log("Errors: " + err);
res.sendStatus(500);
} else {
console.log("Customer Saved! Rows affected: ", doc);
res.sendStatus(200);
};
};

我应该使用不同的 Mongoose 函数吗?我应该使用 $unset 吗?

我不想对数据库进行两次调用(一次用于删除匹配的集合,另一个用于保存新模型。

提前非常感谢!

最佳答案

您可以使用 $unset 删除 contacts 数组,并使用 $set 添加新模型。

mongoose.model('customers').findOneAndUpdate(conditions, { $set:update, $unset: {'contacts': ''}}, options, callback);

关于node.js - 替换mongodb文档而不附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com