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 ...
随机推荐
- 线程池threadPools
1.线程池是用来存储线程的容器 2.Executors.newFixedThreadPool(int n);创建线程池,并且设置线程池的容量为n 3.submit开启线程 4.会返回一个对象futur ...
- .net core WebApi Mutex实现并发同步
Mutex,中文译为互斥体,在.net中也是作为一种线程或进程之间的互斥体存在.即在同一时刻,一个共享资源只允许被某一个线程或进程访问,其他线程或进程需要等待(直至获取互斥锁为止). Mutex的使用 ...
- 解决Fiddler查看Post参数中文乱码的问题
解决Fiddler查看Post参数中文乱码的问题 解决方法: 1.win+R 2.打开注册表编辑器:输入regedit +回车+是 3.HKEY_CURRENT_USER\Software\Micro ...
- 关于C++使用将整形转换为字符串进行格式化的问题
最近使用CTime类获取时间,因为在时间的格式上要求做到统一,所以会对时间信息进行格式化 目的:将时间信息生成为年4位,月2位,日2位,时2位,分2位,秒2位 也就是:2017-02-18 10:42 ...
- python day19--面向对象,接口,封装
#1.接口类,对象类.规范类中方法的统一. # 第一版:三个类,每个类中有相同的方法 # class Alipay: # def __init__(self,money): # self.money= ...
- 利用exosip DNS CACHE自定义SIP服务器地址和端口
文章标题可能表述不清,罢了,我这里描述一个场景: 当使用exosip开发UA时,服务器地址是域名example.com和端口形式,但存在两个限制: 1.example.com没有DNS记录.没有NAP ...
- spring boot 项目无法访问静态页面
- java.lang.ClassNotFoundException: org.apache.http.conn.UnsupportedSchemeException
加入了阿里云的消息服务后,就一直之前报java.lang.ClassNotFoundException: org.apache.http.conn.UnsupportedSchemeException ...
- yii2 Rbac实例 (做完以下这些 会有些小的报错,相信各位都能解决,大多数都是自己命名空间上的问题)。
首先我自己没有使用自带的user表 如果model层没有AuthItem.php 那就自建一个将下面这些内容写入 <?php namespace backend\models; use Yi ...
- Ubuntu16.04中安装搜狗输入法
1.从搜狗输入法官网界面下载安装包 https://pinyin.sogou.com/linux/ 2.安装 sudo dpkg -i sogoupinyin_2.1.0.0082_amd64.deb ...