我在stackoverflow中看到了很多这样的例子,但是没有一个对我有用。也许我的计划错了?
我需要使用Mongoose将新记录插入到嵌套文档中(我想在"history"
数组中添加)。如果文档已经存在,我只能更新它,如果它不存在,则必须添加新文档。我有以下方案:
let equipment_json = {
controls: [{
_id: con.Schema.Types.ObjectId,
name: String,
history: [{
_id: con.Schema.Types.ObjectId,
new: Boolean,
}]
}]
};
let equipment_schema = new con.Schema(equipment_json);
let Equipment = con.mongoose.model('Equipment', Equipment_schema);
此代码应执行更新:
Equipment.update({
'_id': object_equipment.id_equipment,
'controls._id': object_equipment.id_control_type
},{
$set: {
'controls.$.history.$': {
new: true
}
}
},
{
upsert: true, setDefaultsOnInsert: true
},
function (err, doc ) {
console.log( doc );
})
在使用update()
之前,我使用find()
根据条件检查了它的内容。使用find()
,它会返回文档,但是,当我想使用update()
时,它不会添加到数组“controls"
,"new": "true"
。我尝试了与$set
一样$push
。
答案 0 :(得分:1)
只需修改以下代码:
'controls.$.history.$': {
new: true
}
通过
'controls.$.history': {
new: true
}