Node.js Mongoose:在嵌套子文档中更新/插入

Node.js Mongoose:在嵌套子文档中更新/插入,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我在stackoverflow中看到了很多例子,但没有一个对我有用。也许我的计划错了 我需要使用Mongoose将新记录插入到嵌套文档中(我想在“history”数组中添加)。如果文档已经存在,我只能更新它,如果它不存在,则必须添加新文档。我有以下计划: let equipment_json = { controls: [{ _id: con.Schema.Types.ObjectId, name: String, history: [{

我在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()。我尝试了
$set
$push

一样多的功能,只需要修改以下代码:

'controls.$.history.$': {
   new: true
 }


您没有说要匹配历史数组的哪个元素。调用站点上是否只有一个、多个?我需要将“new”的值添加到“history”数组中,只要“\u id”和“controls.\u id”匹配。
'controls.$.history': {
      new: true
 }