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 class CtStreetPurpose
直接上代码
- 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 = ...
随机推荐
- Python while 中简单的语句组
Python while 中简单的语句组: 只使用 while: # 简单的语句组 a = 4 b = 8 num = 0 while a < b: print("a 比 b 小&qu ...
- Django学习路34_models 文件创建数据表
from django.db import models # Create your models here. class BookInfoManager(models.Manager): '''图书 ...
- PHP jdmonthname() 函数
------------恢复内容开始------------ 实例 返回 1998 年 1 月 13 日这天的格利高里历法的月份简写字符串: <?php$jd=gregoriantojd(1,1 ...
- 使用VMware虚拟机建立Ubuntu与主机win7的文件共享与传输
1.要想在虚拟机与主机之间建立共享文件夹必须先安装VMware Tools.方法见https://www.cnblogs.com/lsc666js/p/13403919.html. 2.在VMware ...
- 【NOI2010】超级钢琴 题解(贪心+堆+ST表)
题目链接 题目大意:求序列内长度在$[L,R]$范围内前$k$大子序列之和. ---------------------- 考略每个左端点$i$,合法的区间右端点在$[i+L,i+R]$内. 不妨暴力 ...
- Python解决网吧收费系统,远控网吧电脑设备!
python破解网吧收费系统,远控网吧电脑设备! 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更 ...
- 用Python绘制一套“会跳舞”的动态图形给你看看
在读技术博客的过程中,我们会发现那些能够把知识.成果讲透的博主很多都会做动态图表.他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法. 看这优美的舞姿 很多人学 ...
- URLDecoder异常解决方法
URLDecoder对参数进行解码时候,代码如: URLDecoder.decode(param,"utf-8"); 有时候会出现类似如下的错误: URLDecoder异常Ille ...
- spring boot 中使用spring security阶段小结
1 项目结构图 2 AnyUserDetailsService package com.fengyntec.config; import com.fengyntec.entity.UserEntity ...
- Spring Boot打包瘦身 Docker 使用全过程 动态配置、日志记录配置
springBoot打包的时候代码和jar包打包在同一个jar包里面,会导致jar包非常庞大,在不能连接内网的时候调试代码,每次只改动了java代码就需要把所有的jar包一起上传,导致传输文件浪费了很 ...