C# Mongo DB 修改多层嵌套集合中的字段
C# Mongo DB 修改嵌套集合中的字段
虽然c#的mongo 驱动很强大,而且还支持linq,但是一些复杂的操作语句还是比较困难
这里我用Bson实现功能
这是模型(我这里有多层嵌套)
public class CtStreetPurpose
{ public long Id { get; set; } public List<StreetPurpose> StreetPurposes { get; set; }
} public class StreetPurpose
{
public long BuyerId { get; set; } public string Remark { get; set; } public string RemarkName { get; set; } public List<PurposeStreetId> StreetIds { get; set; } public string PurposeCategory { get; set; } public int Top { get; set; } public string Content { get; set; } public long FollowTime { get; set; } public long UpdateTime { get; set; }
} public class PurposeStreetId
{ public long Id { get; set; } public long StreetId { get; set; }
}
直接上代码
public async Task UpdateStreetPurpose(CtStreetPurpose create)
{ var writeModels = new List<WriteModel<CtStreetPurpose>>();
foreach (var purpose in create.StreetPurposes)
{
//过滤条件
var filter = new BsonDocument
{
{"_id",create.Id},//在monogo db 里面id是_id
//第一层嵌套中的字段过滤
{
"StreetPurposes",new BsonDocument
{
{"$elemMatch",new BsonDocument{{ "BuyerId", purpose.BuyerId}}}
}
},
}; //构建一个bson数组存放需要插入集合的数据
var streetIdsBsonArray = new BsonArray();
foreach (var streetIds in purpose.StreetIds)
{
var streetIdsBson = new BsonDocument
{
{"_id", streetIds.Id},
{nameof(PurposeStreetId.StreetId), streetIds.StreetId}
};
streetIdsBsonArray.Add(streetIdsBson);
} //更新
var update = new BsonDocument
{
{
//插入集合
"$push",new BsonDocument
{
{
//如果不是插入集合--这里需要修改
"StreetPurposes.$.StreetIds",new BsonDocument
{
{"$each",streetIdsBsonArray}
}
}
}
}
}; writeModels.Add(new UpdateManyModel<CtStreetPurpose>(filter, update) { IsUpsert = true }); // IsUpsert--强制更新
}
await collection.BulkWriteAsync(session, writeModels);
}
第一次写问随笔没什么经验 ^ - ^
C# Mongo DB 修改多层嵌套集合中的字段的更多相关文章
- iOS开发-多层嵌套block中如何使用__weak和__strong
1.关于__weak__weak只能在ARC模式下使用,也只能修饰对象(比如NSString等),不能修饰基本数据类型(比如int等)__weak修饰的对象在block中不可以被重新赋值.__weak ...
- JsonPath:从多层嵌套Json中解析所需要的值
问题 应用中,常常要从嵌套的JSON串中解析出所需要的数据.通常的做法是,先将JSON转换成Map, 然后一层层地判空和解析.可使用 JsonPath 来解决这个问题. 给定一个 JSON 串如下所示 ...
- 增强 用文本增强修改SAP标准屏幕中的字段名称 属于元素的文本增强
如果想要改变标准屏幕中的字段名称,如把物料主数据基本数据元素的名字改为我们想要的名字 . 1.首先,事务MM03进入物料主数据的基本数据2视图中,将鼠标光标放在需要更改的字段“页格式”上,然后按F1键 ...
- java多层嵌套集合的json,如何获取多层集合中所需要的value
就很简单的一个问题折磨了整整一天,好在压抑的心情终于释放了,终于闲下来觉得是不是应该记录一下. 首先这个json串是从外网接口返回的数据,想要了解的朋友们可以复制到json解析器中看一下格式:http ...
- list集合中指定字段去重
在开发中,有时会需要指定字段去重,以下为实现方法: 假设有个房地产权的类,其中宗地代码ZDDM值重复,而我们在前端页面显示时,只需要一条数据,因为公共字段都一样: IEqualityComparer需 ...
- log4j打印错误日志输出 利用sql取出的值放在list集合中,集合中的字段类型为映射类类型
public ServiceResult<List<KefuDetail>> MaxRespondtime(Date startDate,Date endDate, Strin ...
- ajaxGird修改一条记录中的字段
var rowData = ajaxgrid.getSelectedRow(); var quality = rowData["quality"]; var rowIndex = ...
- Mongo DB 2.6 需要知道的一些自身限定
在现实的世界中,任何事情都有两面性,在程序的世界中,亦然! 我们不论是在使用一门新的语言,还是一门新的技术,在了解它有多么的让人兴奋,让人轻松,多么的优秀之余,还是很有必要了解一些他的局限性,方便你在 ...
- pythong中的全局变量的调用和嵌套函数中变量的使用
全局变量调用:想要在自定义的函数中使用全局变量,就得要在函数用关键字global声明,然后就可以对全局变量进行修改.嵌套函数中的变量的调用:要在嵌套的变量中,使用nonlocal的声明'''num = ...
随机推荐
- PDO::errorInfo
PDO::errorCode — 返回最后一次操作数据库的错误信息(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 public array PDO::e ...
- pagehelper的使用和一些坑!
[toc] ##1.1 pagehelper介绍和使用 PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件. 原本以为分页插件,应该是很简单的,然而PageHelper比我想象 ...
- linux的服务管理(centos6和Centos7)和网络管理(网卡配置),计划服务cron
服务和网络 管理 init ifcfg ens33 1.服务: Linux系统中提供的功能,统称为服务,如:at服务.cron服务.web服务.FTP服务.sshd服务等. 服务是由已经在运行的进程 ...
- Linux服务器配置SSH免密登录
SSH为Secure Shell的缩写,由IETF的网络小组(Network Working Group)所制定:SSH为建立在应用层基础上的安全协议.SSH是目前较可靠,专为远程登录会话和其他网络服 ...
- 微信小程序订阅消息调研
相关资料 背景:微信模板消息已正式下架,改为订阅消息,详情如下: 服务变更通知 订阅消息:订阅消息相关内容如下: 订阅消息 接口设计 获取接口访问凭证 :根据appId和secret获取接口访问凭证a ...
- Android SP的具体内容
过了这么久了,看看自己的园龄都17天了,一直在总结,从未缺席,我还是很开心的,踏踏实实的完成自己能学到的. 今天学习SP SP:全称SharedPreferences,别问我为啥知道,因为打了好多遍了 ...
- Python实现 QQ 半自动发送情话,我追到了女神
之前追女神时候用的情话发送脚本,每次工作日上班开启电脑,就会唤醒QQ,然后发送一条情话给女神,自动唤醒QQ复制情话,不用担心遗忘,现在整理分享一下,妈妈再也不用担心我找不到对象了. 效果图: 很多人学 ...
- 入门python有什么好的书籍推荐?纯干货推荐,你值得一看 python基础,爬虫,数据分析
Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...
- Vue 父子组件之间的互相调用方法
第一种方法 直接在子组件中通过this.$parent.event来调用父组件的方法 父组件 <template> <div> <child></child& ...
- 【工具】之003-Windows下常用工具
写在前面 我很懒,,,不想敲一个命令一个命令敲... "偷懒是有前提的,不是之前,就是之后." 常用命令 Windows 已知进程名称 :: Windows 下 杀死指定进程 ta ...