Создайте коллекцию «тест» и вставьте в нее один документ:
{
"_id" : NumberLong(1),
"pointsBalances" : [
{
"period" : "2020",
"startDate" : ISODate("2020-01-01T00:00:00.000Z"),
"endDate" : ISODate("2020-12-31T23:59:59.999Z"),
"value" : 0
},
{
"period" : "2019",
"startDate" : ISODate("2019-01-01T00:00:00.000Z"),
"endDate" : ISODate("2019-12-31T23:59:59.999Z"),
"value" : 0
}
]
}
Затем выполните обновление - оно должно работать правильно:
db.getCollection('test').update(
{$and: [ {'_id': 1}, {"pointsBalances.period": '2019'}]},
{$set: { "pointsBalances.$.value": 100 } }
)
Теперь попробуем обновить по датам:
db.getCollection('test').update(
{ $and: [
{'_id': 1},
{"pointsBalances.startDate": {$lte: ISODate("2019-05-01T00:00:00.000Z")}},
{"pointsBalances.endDate": {$gte: ISODate("2019-05-01T00:00:00.000Z")}}
]},
{$set: { "pointsBalances.$.value": 200 } })
Похоже, что неправильный элемент обновлен