Mongo 3.2: обновить все элементы массива, соответствующие условию - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу, чтобы запрос обновил pmd и ed для всего массива DEF, если isActive равен 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
                    }
                ]
            }
        }
    }
}

Я пробовал 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")}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...