【发布时间】:2018-08-07 08:40:43
【问题描述】:
在我的 Azure CosmosDb MongoApi 中,我有带有嵌入文档数组的 JSON。
{
"_id": ObjectId("5a95745df886842904b82f71"),
"token": "value1",
"channel": "value2",
"urls":
[
{
"url": "<url1>",
"interval": "<int>"
},
{
"url": "<url2>"
"interval": "<int>"
}
]
}
我想更新特定数组元素中的“间隔”字段。问题是当我使用this 或this 之类的解决方案时,我最终会遇到异常:
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}} );
我的问题是导致此异常的原因以及如何避免它?
【问题讨论】:
-
你试过
db.Users.update( {"Urls.interval": 60}, {$set: {"Urls.$.interval": 30}} );吗? -
@mickl 是的,抱歉,格式错误,在我的 JSON 模式中,我的“urls”小写。我会立即更新问题。
标签: c# .net mongodb azure-cosmosdb