我有这个猫鼬模式
var ContactSchema = module.exports = new mongoose.Schema({
name: {
type: String,
required: true
},
phone: {
type: Number,
required: true,
},
messages: [
{
title: {type: String, required: true},
msg: {type: String, required: true}
}],
address:{ city:String,
state:String
}
});
我最初拥有名称和电话字段的收藏集。我需要将带有新消息的集合更新为messages数组,将新地址更新为address对象。该函数还必须处理任何单个操作,即在某些情况下,我只更新消息数组或更新名称和地址。所以我怎么能在一个功能中完成所有操作。
var messages= {
title: req.body.title,
msg: req.body.msg
}
Model.findOneAndUpdate({'_id': req.body.id,},{$push: {messages:message}},{upsert: true}, function (err, data) {
if (err) {
return res.status(500).send(err);
}
if (!data) {
return res.status(404).end();
}
return res.status(200).send(data);
});
答案 0 :(得分:13)
您可以尝试在更新对象中同时使用$set
和$push
运算符。例如,假设您要在一个操作中更新名称和地址字段,请使用名称字段上的$set
和地址数组的$push
操作:
var messages= {
title: req.body.title,
msg: req.body.msg
},
query = {'_id': req.body.id},
update = {
$set: {name: req.body.name},
$push: {messages: message}
},
options = {upsert: true};
Model.findOneAndUpdate(query, update, options, function (err, data) {
if (err) {
return res.status(500).send(err);
}
if (!data) {
return res.status(404).end();
}
return res.status(200).send(data);
});