使用无法在猫鼬中使用的数组过滤器更新多个嵌套数组

时间:2018-07-27 14:41:16

标签: arrays mongoose filter subdocument

我正在将nodeJS与mongoldb 3.6.4一起使用。我已经尝试使用Arrayfilter更新嵌套的子文档。但这不是更新值。这是我尝试的示例代码(在合并了Anthony Winzlet的注释以进行asyn Call之后)

    var mongoose     = require('mongoose');
    var Schema       = mongoose.Schema;

var DrugRefSchema   = new Schema({
    drugRefs: [{
    refName: String,
    drugs: [{   
      name: String,
      drugType:String,
    }]
    }]
});

module.exports = mongoose.model('DrugRef', DrugRefSchema);

async function UpdateMedList () {
    const out = await DrugRef.aggregate([
    { $unwind:  '$drugRefs'},
    { $unwind:  '$drugRefs.drugs'},
    { $project : { refName:'$drugRefs.refName', med:'$drugRefs.drugs.name',_id:0}},
    { $group: {_id: { med: '$med',refName:'$refName'}}},
    { $project : { med:'$_id.med', refName:'$_id.refName',_id:0}},
    ])

    out.map(async(data) => {
        var refName=data.refName;
        var oldName=data.med;
        var newName=oldName.trim();

       const updateName = await DrugRef.update(
           { },
           { $set:{"drugRefs.$[i].drugs.$[j].name":newName}},
           { arrayFilters: [ { "i.refName": refName },{ "j.name": oldName }], "multi": true }
           )

       console.log("Orig:'"+oldName+"': to be updated:'"+newName+"':");
       console.log("update Result:"+JSON.stringify(updateName));

    })
}

,名称仍未更改。请帮助

1 个答案:

答案 0 :(得分:0)

问题是猫鼬版本。是4.3。当我升级到5.x时,它开始工作。 另外,当我使用npm升级时,使用-g选项安装mongoose时,它也升级至5.3.0,但我的模块mongoose仍指向4.3。然后我也必须安装不带-g的猫鼬