Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试更新MongoDb数组元素时出错_C#_.net_Mongodb_Azure Cosmosdb - Fatal编程技术网

C# 尝试更新MongoDb数组元素时出错

C# 尝试更新MongoDb数组元素时出错,c#,.net,mongodb,azure-cosmosdb,C#,.net,Mongodb,Azure Cosmosdb,在我的Azure CosmosDb MongoApi中,我有一个带有嵌入文档数组的JSON { "_id": ObjectId("5a95745df886842904b82f71"), "token": "value1", "channel": "value2", "urls": [ { "url": "<url1>", "interval": "<int>"

在我的Azure CosmosDb MongoApi中,我有一个带有嵌入文档数组的JSON

{
    "_id": ObjectId("5a95745df886842904b82f71"),
    "token": "value1",
    "channel": "value2",
    "urls":
    [
        {
            "url": "<url1>", 
            "interval": "<int>"
        },
        {
            "url": "<url2>"
            "interval": "<int>"
        }
    ]
}
因此,我决定尝试在Mongo Shell中运行查询,但得到了相同的错误:

{
    "nMatched": 0,
    "nUpserted": 0,
    "nModified": 0,
    "writeError": 
    {
        "code": 2,
        "errmsg": "Invalid BSON field name 'urls.$.interval'"
    }
}
这是我的C#代码:


我的问题是导致此异常的原因以及如何避免它?

Cosmos DB当前不支持位置运算符。请使用以下解决方法:在客户端迭代文档和数组元素,更改所需元素,并使用新数组对文档进行更新:   例如,假设您拥有以下元素的用户集合:

…您可以发出以下命令来更新其中一个元素(在本例中id=1):


您可以调整if()中的条件,调整的粒度甚至比位置运算符允许的粒度还要细。

您是否尝试过
db.Users.update({“url.interval”:60},{$set:{“url.$.interval”:30})?@mickl Yep,对不起,格式错误,在我的JSON模式中,我有“URL”小写。我会马上更新这个问题。非常感谢它的帮助!
{
    "nMatched": 0,
    "nUpserted": 0,
    "nModified": 0,
    "writeError": 
    {
        "code": 2,
        "errmsg": "Invalid BSON field name 'urls.$.interval'"
    }
}
    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);
db.Users.update( {"urls.interval": 60}, {$set: {"urls.$.interval": 30}} ); 
{ 
    "_id" : ObjectId("59d6b719708b990d6c9b3aca"), 
    "tags" : [
        {
            "id" : 1, 
            "value" : "11"
        }, 
        {
            "id" : 2, 
            "value" : "22"
        }, 
        {
            "id" : 3, 
            "value" : "32"
        }
    ]
}
 
db.users.find().forEach( 
        function(user) 
        { 
         user.tags.forEach( 
         function(tag) 
         {
               if (tag.id=="1")
               {
                       tag.value = "Updated!";                          
                       db.users.updateOne({_id : user._id}, {$set: {"tags": user.tags}});
               }
        }
        );
       }  
);