使用数组过滤器更新多个嵌套数组在猫鼬中不起作用

Posted

技术标签:

【中文标题】使用数组过滤器更新多个嵌套数组在猫鼬中不起作用【英文标题】:to update multiple nested array using array filter not working in mongoose 【发布时间】:2019-01-04 17:15:11 【问题描述】:

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

    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】:

问题在于猫鼬版本。那是4.3。当我升级到 5.x 时,它开始工作。 此外,当我使用带有 -g 选项的 npm install mongoose 升级时,它升级到了 5.3.0,但我的模块 mongoose 仍然指向 4.3。然后我不得不在没有 -g 的情况下安装猫鼬

【讨论】:

以上是关于使用数组过滤器更新多个嵌套数组在猫鼬中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 $elemMatch 查找和过滤并更新数组的所有元素该元素在猫鼬中有一个特殊的日期?

在猫鼬中对嵌套数组进行排序

如何仅在猫鼬中使用聚合填充嵌套在对象数组中的字段?

猫鼬中的保存功能不起作用

在猫鼬中,如何根据当前结果过滤搜索结果?

在猫鼬中排序