Mongo 3.2:更新所有匹配条件的数组元素

shr*_*ngh 5 mongodb spring-data

我想要更新一个查询,pmd并且ed对于所有DEF数组 if isActiveis true,位置运算符从 Mongo 3.6 开始可用。

有人可以建议一些相当于 Mongo 3.2 中的位置运算符的东西吗:

文档:

{
    "_id" : {
        "_id" : "123456789",
        "globalId" : "00012345001"
    },
    "regionalAttributes" : {
        "CAD" : {
            "priceS" : "XYZ",
            "mdClusters" : {
                "DEF" : [ 
                    {
                        "cId" : "129",
                        "cName" : "815",
                        "pmd" : ISODate("2018-01-04T00:00:00.000Z"),
                        "ed" : ISODate("2018-04-15T00:00:00.000Z"),
                        "isActive" : false
                    }, 
                    {
                        "cId" : "193",
                        "cName" : "811",
                        "pmd" : ISODate("2019-06-29T00:00:00.000Z"),
                        "ed" : ISODate("2019-05-30T00:00:00.000Z"),
                        "isActive" : true
                    }, 
                    {
                        "cId" : "194",
                        "cName" : "812",
                        "pmd" : ISODate("2018-01-04T00:00:00.000Z"),
                        "ed" : ISODate("2018-04-15T00:00:00.000Z"),
                        "isActive" : true
                    }
                ]
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试了 elemMatch 但它只更新第一个匹配的数组

 db.getCollection('items').updateMany(

    { "_id._id" : "123456789",{ "regionalAttributes.CAD.mdClusters.DEF": { "$elemMatch": {"isActive": true }} }},
    {"$set" : { "regionalAttributes.CAD.mdClusters.DEF.$.pmd" : ISODate("2019-05-29T00:00:00.000Z") , 
    "regionalAttributes.CAD.mdClusters.DEF.$.ed" : ISODate("2019-06-26T00:00:00.000Z")}});
Run Code Online (Sandbox Code Playgroud)