当前位置: 首页 > 编程语言 > C#

在MongoDB中使用官方C#驱动升级分享

时间:2023-04-10 22:23:57 C#

在MongoDB中使用官方C#驱动升级在mongodb的官方文档中,他们提到了upserts,所以写一个upsert命令而不是:if(_campaignRepo.Exists(camp)){_campaignRepo.DeleteByIdAndSystemId(营地);}_campaignRepo.Save(营);如果可能的话,在数据库级别实现该逻辑的东西。那么如果有upsert方法呢?以下代码来自正在运行的应用程序:weekplanStore.Update(Query.EQ("weekNumber",week),Update.Replace(rawWeekPlan),UpdateFlags.Upsert);weekplanStore是我的MongoDB集合,代码将在第一个参数中更新查询找到的文档,如果找不到则插入新文档。“技巧”是使用UpdateFlags.Upsert修饰符。rawWeekPlan是具有以下类型的插入或更新对象:privateclassRawWeekPlan{publicObjectIdid;publicintweekNumber;公共WeekPlanEntry[]条目;并由驱动程序自动转换为bson。MongoDBC#驱动程序版本2要求在写入命令上设置IsUpsert标志。此示例将插入整个文档。varnewDoc=newBsonDocument{{"_id",123},{"someKey","someValue"}};varresult=awaitcollection.ReplaceOneAsync(filter:newBsonDocument("_id",123),options:newUpdateOptions{IsUpsert=true},replacement:newDoc);MongoDBC#驱动程序的版本1在Save命令中实现了这个逻辑。varnewDoc=newBsonDocument{{"_id",123},{"someKey","someValue"}};收藏.保存(新文档);Save方法是Insert和Update的组合。如果文档的Id成员有一个值,则假定它是一个现有文档,并且Save调用文档上的Update(设置Upsert标志,以防它实际上是一个新文档)。否则,首先将新生成的唯一值赋值给Id成员后,假定为一个新文档并保存调用insert。参考:http://mongodb.github.io/mongo-csharp-driver/1.11/driver/#save-tdocument-method注意:这确实需要正确映射Id字段。更多信息在这里:http://mongodb.github.io/mongo-csharp-driver/1.11/serialization/#identifying-the-id-field-or-property从驱动程序的v2.0开始,有一个新的异步-仅API。不应再使用旧API,因为它是新API的阻塞外观,已被弃用。当前推荐的记录ReplaceOneAsync的方法是调用并等待IsUpsert以获取ReplaceOneAsyncIsUpsert标志和与相关文档匹配的过滤器:Hamsterhamster=...varreplaceOneResult=awaitcollection.ReplaceOneAsync(doc=>doc.Id==hamster.Id,hamster,newUpdateOptions{IsUpsert=true});您可以通过查看ReplaceOneResult.MatchedCount来检查该操作是插入还是更新:您可以使用常规更新命令,但只需将Upsert更新标志传递给它MongoCollectioncollection=db。GetCollection("匹配");varquery=newQueryDocument("recordId",recordId);varupdate=Update.Set("FirstName","John").Set("LastName","Doe");matchCollection.Update(查询、更新、UpdateFlags.Upsert、SafeMode.False);此代码改编自一个工作应用程序(为清楚起见,已缩短)以上是C#学习教程:使用官方C#驱动程序在MongoDB中更新插入分享的内容,如果它对您有用并且您需要了解更多有关C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: