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 ...
随机推荐
- python --常用内置模块01
1.简单了解模块 模块就是我们把装有特定功能的代码进行归类的解构,从代码编写的单位来看我们的程序 从小到大的顺序:一条代码< 语句块<代码块(函数,类) < 模块 我 ...
- vim 插件 -- NERDTree
介绍 NERDTree 插件就是使vim编辑器有目录效果. 所谓无图无真相,所以直接看这个插件的效果图吧. 下载 https://www.vim.org/scripts/script.php?scri ...
- learning makefile VPATH
- 用Python自动发送邮件
用Python自动发送邮件 最近需要在服务器上处理一些耗时比较长的任务,因此想到利用python写一个自动发送邮件的脚本,在任务执行完毕后发送邮件通知我.以下代码以163邮箱为例: 开通163 ...
- Python基础04_str_方法
所有的练习都是用的python3 ,还没试过python2 ############## 必须要会的7个基本方法 ############## join split find strip upper ...
- L2-016. 愿天下有情人都是失散多年的兄妹(深搜)*
L2-016. 愿天下有情人都是失散多年的兄妹 参考博客 #include<iostream> #include<cstdio> #include<cstring> ...
- contos防爆力破解密码
最近看了一篇文章ssh的爆力破解所以自己就做了一下防爆力破解denyhost 下载denyhost的软件包并上传的服务器下载地址https://sourceforge.net/projects/den ...
- Github Page 搜索工具
轮子 今天造了一个轮子 -- Github Page搜索工具 https://man-ing.com/github. 什么是Github Page 直接从GitHub存储库托管.只需编辑,推送,更改即 ...
- 测试那些事儿—postman进阶使用与实战
1.postman进阶使用 1)环境与变量: 备注:全局 和 局部 变量不会影响到变量的调用,区别在于局部变量对于非当前环境不能使用而已. a.当测试存在多个环境时,可以先设置一个环境,然后在此环境下 ...
- Vue: 用 key 管理可复用的元素
<div id="login"> <template v-if="loginType === 'username'"> <labe ...