Я хочу, чтобы запрос обновил 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")}});