猫鼬更新,对数组进行推送操作并对对象进行设置操作
mongoose update with push operations on array and set operation on object
我有这个猫鼬模式
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
}
});
我最初的集合集名称和 phone 字段。我需要将新消息更新到消息数组中,并将新地址更新到地址对象中。该函数还必须需要处理任何单个操作,即在某些情况下我只更新消息数组或更新名称和地址。那么我怎样才能在一个函数中完成所有操作。
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);
});
您可以尝试在更新对象中同时使用 $set
and $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);
});
我有这个猫鼬模式
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
}
});
我最初的集合集名称和 phone 字段。我需要将新消息更新到消息数组中,并将新地址更新到地址对象中。该函数还必须需要处理任何单个操作,即在某些情况下我只更新消息数组或更新名称和地址。那么我怎样才能在一个函数中完成所有操作。
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);
});
您可以尝试在更新对象中同时使用 $set
and $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);
});