C#学习教程:尝试更新MongoDb数组元素时出错{"_id":ObjectId("5a95745df886842904b82f71"),"token":"value1","channel":"value2","urls":[{"url":"","interval":""},{"url":"""interval":""}]}我想更新特定数组元素中的“interval”字段。问题是,当我使用这样或这样的解决方案时,我最终会遇到异常:MongoDB.Driver.MongoCommandException:命令findAndModify失败:无效的BSON字段名称“urls.$.interval”。所以,我决定尝试得到同样的错误:{"nMatched":0,"nUpserted":0,"nModified":0,"writeError":{"code":2,"errmsg":"InvalidBSONfieldname'urls.$.interval'"}}这是我的C#代码:varfilterBuilder=Builders.Filter;varfilter=filterBuilder.Where(p=>p.Token==model.Token&&p.Channel==model.Channel&&p.Urls.Any(u=>u.Url==model.Url));varupdate=Builders.Update.Set(p=>p.Urls.ElementAt(-1).interval,5);等待_context.Users.FindOneAndUpdateAsync(过滤器,更新);这是我的MongoDbshell请求:db.Users.update({"urls.interval":60},{$set:{"urls.$.interval":30}});我的问题是导致此异常的原因是什么,我该如何避免?CosmosDB当前不支持位置运算符。使用以下解决方法:遍历客户端上的文档和数组元素,更改所需的元素并使用新数组发布对文档的更新:例如,假设您有一个包含以下元素的集合用户:{“_id”:ObjectId(“59d6b719708b990d6c9b3aca”),“标签”:[{“id”:1,“值”:“11”},{“id”:2,“值”:“22”},{“id”:3,"value":"32"}]}...您可以发出以下命令来更新其中一个元素(在本例中为id=1):db.users.find().forEach(function(user){user.tags.forEach(function(tag){if(tag.id=="1"){tag.value="Updated!";db.users.updateOne({_id:user._id},{$设置:{“标签”:用户.tags}});}});});您可以调整if()中的条件,其粒度比位置运算符所允许的粒度更细。以上是C#学习教程:ErrorwhentryingtoupdatetheelementsoftheMongoDbarray。所有内容共享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
