使用官方C#驱动程序在Mongo DB中进行升级
在mongodb的官方文档中,他们提到了upserts,所以编写一个upsert命令而不是:
if (_campaignRepo.Exists(camp)) { _campaignRepo.DeleteByIdAndSystemId(camp); } _campaignRepo.Save(camp);
如果可能的话,可以在db级别实现该逻辑的东西。 那么如果有一个upsert的方法是什么?
以下代码来自正在运行的应用程序:
weekplanStore.Update( Query.EQ("weekNumber", week), Update.Replace(rawWeekPlan), UpdateFlags.Upsert);
weekplanStore是我的MongoDB集合,代码将更新在第一个参数中使用查询找到的文档,或者如果找不到则插入新文档。 “技巧”是使用UpdateFlags.Upsert修饰符。
rawWeekPlan是插入或更新的对象,具有以下类型:
private class RawWeekPlan { public ObjectId id; public int weekNumber; public WeekPlanEntry[] entries; }
并由司机自动变成bson。
MongoDB C#驱动程序的第2版需要在write命令中设置IsUpsert
标志。 此示例将插入整个文档。
var newDoc = new BsonDocument { { "_id", 123 }, { "someKey", "someValue" } }; var result = await collection.ReplaceOneAsync( filter: new BsonDocument("_id", 123), options: new UpdateOptions { IsUpsert = true }, replacement: newDoc);
MongoDB C#驱动程序的版本1在Save
命令中实现此逻辑。
var newDoc = new BsonDocument { { "_id", 123 }, { "someKey", "someValue" } }; collection.Save(newDoc);
Save方法是Insert和Update的组合。 如果文档的Id成员有一个值,则假定它是一个现有文档,并在文档上保存调用Update(设置Upsert标志,以防万一它实际上是一个新文档)。 否则,在首先将新生成的唯一值分配给Id成员后,它将被假定为新文档并保存调用插入。
参考: 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开始,有一个新的async-only API。 不应再使用旧的API,因为它是新API的阻止外观,不推荐使用。
当前推荐的文档ReplaceOneAsync
方法是通过调用并等待ReplaceOneAsync
IsUpsert
标志的IsUpsert
以及与相关文档匹配的filter:
Hamster hamster = ... var replaceOneResult = await collection.ReplaceOneAsync( doc => doc.Id == hamster.Id, hamster, new UpdateOptions {IsUpsert = true});
您可以通过查看ReplaceOneResult.MatchedCount
来检查操作是插入还是更新:
您可以使用常规更新命令,但只需将其传递给Upsert更新标志即可
MongoCollection collection = db.GetCollection("matches"); var query = new QueryDocument("recordId", recordId); var update = Update.Set("FirstName", "John").Set("LastName","Doe"); matchCollection.Update(query, update, UpdateFlags.Upsert, SafeMode.False);
该代码改编自工作应用程序(为清晰起见缩短)
上述就是C#学习教程:使用官方C#驱动程序在Mongo DB中进行升级分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1033760.html