Mongodb 批量Upsert
List<UpdateOneModel<Entity>> requests = new List<UpdateOneModel<Entity>>(entities.Count());
foreach (var entity in entities)
{
var filter = new FilterDefinitionBuilder<Entity>().Where(m => m.Field1 == entity.Field1 && m.Field2== entity.Field2);
var update = new UpdateDefinitionBuilder<Entity>().Set(m => m.Field1, entity.Field1).Set(m => m.Field2, entity.Field2);
var request = new UpdateOneModel<Entity>(filter, update);
request.IsUpsert = true;
requests.Add(request);
}
await Collection.BulkWriteAsync(requests);
http://stackoverflow.com/questions/34543056/mongodb-c-sharp-driver-upsert-many-based-on-candidate-key
我的:
var advisorEmails = Database.GetCollection<AdvisorEmail>(Settings.AdvisorEmailCollection).Find(Builders<AdvisorEmail>.Filter.In(x => x.Id, dicAdvisorEmail.Keys)).ToList();
if (advisorEmails != null && advisorEmails.Count > 0) {
List<UpdateOneModel<AdvisorEmail>> lstUpdateActions = new List<UpdateOneModel<AdvisorEmail>>();
List<string> lstRemoveAdvisorEmailIds = new List<string>();
foreach (AdvisorEmail advisorEmail in advisorEmails)
{
if (dicAdvisorEmail.ContainsKey(advisorEmail.Id)) {
List<string> lstRemoveIds = dicAdvisorEmail[advisorEmail.Id];
List<string> lstnewIds = new List<string>();
foreach (string s in advisorEmail.ClientIds) {
if (!lstRemoveIds.Contains(s)) lstnewIds.Add(s);
}
if (lstnewIds.Count > 0)
{
var filter = new FilterDefinitionBuilder<AdvisorEmail>().Where(m => m.Id == advisorEmail.Id);
var update = new UpdateDefinitionBuilder<AdvisorEmail>().Set(m => m.ClientIds, lstnewIds);
var action = new UpdateOneModel<AdvisorEmail>(filter, update);
action.IsUpsert = true;
lstUpdateActions.Add(action); }
else {
lstRemoveAdvisorEmailIds.Add(advisorEmail.Id);
}
}
}
if (lstUpdateActions.Count > 0)
Database.GetCollection<AdvisorEmail>(Settings.AdvisorEmailCollection).BulkWrite(lstUpdateActions);
if (lstRemoveAdvisorEmailIds.Count > 0)
LocalAdvisorEmailDB.DeleteMany(Filter<AdvisorEmail>().In(x => x.Id, lstRemoveAdvisorEmailIds));
}
Mongodb 批量Upsert的更多相关文章
- MongoDB批量更新和批量插入的方式
最近,在调试代码中发现向MongoDB插入或者更新文档记录时若是多条的话都是采用for循环操作的,这样的处理方式会造成数据操作耗时,不符合批量处理的原则:对此,个人整理了一下有关MongoDB的批量更 ...
- MongoDB的upsert状态判断和pymongo使用方法
在mongo中,有一个命令非常的方便,就是upsert,顾名思义就是update+insert的作用 根据条件判断有无记录,有的话就更新记录,没有的话就插入一条记录 upsert的使用方法: Mong ...
- MongoDB批量导入及简单的性能优化
今天简单分享一下MongoDB使用过程中的一些性能优化,其实并不只适用MongoDB,其他数据库多少也可适用. 首先先随机导入一千万条数据.这里我分段导入的,因为mongo的BsonDocument一 ...
- MongoDB 的 upsert
MongoDB 的update 方法的三个参数是upsert,这个参数是个布尔类型,默认是false.当它为true的时候,update方法会首先查找与第一个参数匹配的记录,在用第二个参数更新之,如果 ...
- mongodb批量插入数据
年前由于公司业务需要,后台需要获取流水记录,需要每天定时跑脚本,将流水记录跑入库里边,每天大概有个一百万左右,使用的数据库是mongodb,考虑到一条一条录入数据,100多万会跑断,就想着批量录入数据 ...
- mongodb 批量更新 数组的键操作的文件
persons该文件的数据如下面的: > db.persons.find() { "_id" : 2, "name" : 2 } { "_id& ...
- mongodb批量更新操作文档的数组键
persons文档的数据如下: > db.persons.find(){ "_id" : 2, "name" : 2 }{ "_id" ...
- mongodb批量处理
mongodb支持批量插入. 1.使用Java mongodb api 查看源码com.mongodb.MongoCollectionImpl,有两个方法 @Override public void ...
- mongoDB 批量更改数据,某个字段值等于另一个字段值
由于mongodb数据库类似js的写法,所以即使数据库中新的列不存在也会自动创建 db.hospital.find().forEach( function(item){ db.hospital.upd ...
随机推荐
- 6、什么是TypeScript、TypeScript的安装、转换为.js文件
1.什么是TypeScript (本人用自己的理解梳理了一下,不代表官方意见) TypeScript:Type+ECMAScript6 TypeScript是一种预处理编程语言,遵循es6标准规范,在 ...
- virtural machine eth1
DEVICE=eth1HWADDR=00:50:56:33:EF:21TYPE=EthernetUUID=f35bd21c-9636-4e3f-a05c-bd4382c352bfONBOOT=yesN ...
- web项目执行流程
先扫描web.xml文件 jsp请求servlet servlet 调数据/不调数据 重定向/转发 Dao(封装数据) Biz(数据处理) 逻辑判段 返回前端界面显示
- IDEA的十大快捷键
Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论.每个人都有自己的最爱,想排出个理想的榜单还真是困难.以前也整理过Intellij的快捷键,这次就按 ...
- 打开本页N秒后跳转页面
在head标签里面 <meta http-equiv="refresh" content="4;url=" />
- HTTP的缓存策略
etag 与 if-match https://www.cnblogs.com/huangzhilong/p/4999207.html https://juejin.im/post/5c136bd16 ...
- 学习java的第4天 (2019-03-21 11:49)
学习java的第4天 好文要顶 关注我 收藏该文 里里零关注 - 0粉丝 - 0 0 0 posted on 2019-03-21 11:49 编辑 抱歉! ...
- webgl优化
浏览器支持: Mozilla Firefox 42,Google Chrome 46,Apple Safari 9.0,MS Internet Explorer 11,MS Edge 13 Safar ...
- Java语法基础学习DayTwelve(泛型)
一.泛型(Generic)在集合中的使用 1.作用 (1)解决元素存储的安全问题 (2)解决获取数据元素时,需要类型强转的问题 2.代码案例 //在集合没有使用泛型的情况下 List list = n ...
- Add和AddRange的使用
Add 是每次将单个元素添加到集合里面 AddRange可以一次性添加多个元素到集合里面 AddRange例子: public static int ExecuteCommand(st ...