В моём Azure CosmosDb MongoApi есть JSON с вложенным массивом документов.
{
"_id": ObjectId("5a95745df886842904b82f71"),
"token": "value1",
"channel": "value2",
"urls":
[
{
"url": "<url1>",
"interval": "<int>"
},
{
"url": "<url2>"
"interval": "<int>"
}
]
}
Я хочу обновить поле "interval" у конкретного элемента массива. Проблема в том, что когда я использую такие решения, как это или это, я получаю следующий экспешн:
MongoDB.Driver.MongoCommandException: Command findAndModify failed: Invalid BSON field name 'urls.$.interval'.
Тогда я решил сделать запрос через Mongo Shell и получил такую же ошибку:
{
"nMatched": 0,
"nUpserted": 0,
"nModified": 0,
"writeError":
{
"code": 2,
"errmsg": "Invalid BSON field name 'urls.$.interval'"
}
}
Вот мой C# код:
var filterBuilder = Builders<User>.Filter;
var filter = filterBuilder.Where(p => p.Token == model.Token && p.Channel == model.Channel && p.Urls.Any( u => u.Url == model.Url));
var update = Builders<User>.Update.Set(p => p.Urls.ElementAt(-1).interval, 5);
await _context.Users.FindOneAndUpdateAsync<User>(filter, update);
Вот мой запрос в MongoDb shell:
db.Users.update( {"urls.interval": 60}, {$set: {"urls.$.interval": 30}} );
Вопрос в том, откуда экспешн берётся и как его избежать?
Получил ответ на английском SO, проблема была в том, что CosmosDB не поддерживает операторы позиционирования, ссылка на ответ
Виртуальный выделенный сервер (VDS) становится отличным выбором
доброго времени сутоксвалилась на меня интересная задача, но не знаю с какой стороны к ней подступиться