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 = ...
随机推荐
- SpringBoot整合Mail发送邮件&发送模板邮件
整合mail发送邮件,其实就是通过代码来操作发送邮件的步骤,编辑收件人.邮件内容.邮件附件等等.通过邮件可以拓展出短信验证码.消息通知等业务. 一.pom文件引入依赖 <dependency&g ...
- numpy巩固
导包 import numpy as np 创建二维数组 x = np.matrix([[1,2,3],[4,5,6]]) 创建一维数组 y = np.matrix([1,2,3,4,5,6]) x ...
- Python os.lchmod() 方法
概述 os.lchmod() 方法用于修改连接文件权限.高佣联盟 www.cgewang.com 只支持在 Unix 下使用. 语法 lchmod()方法语法格式如下: os.lchmod(path, ...
- PHP restore_exception_handler() 函数
定义和用法 restore_exception_handler() 函数恢复之前的异常处理程序. 该函数用于在通过 set_exception_handler() 函数改变后恢复之前的异常处理程序. ...
- PHP zip_entry_compressedsize() 函数
定义和用法 zip_entry_compressedsize() 函数返回 zip 档案项目的压缩文件尺寸.高佣联盟 www.cgewang.com 语法 zip_entry_compressedsi ...
- react引入相同组件时互不影响
具体代码可以查看我的代码仓库 https://gitee.com/haomYGH/Web20/tree/master/010-React/014-redux-immutable 页面展示 要处理的问题 ...
- HashMap源码(数组算法)
Jdk1.8初始化hashMap容量的算法 static final int tableSizeFor(int cap) { // 先减1,避免传进来的本来就是2的n次幂,导致算出来多了一次幂,比如传 ...
- python与pycharm的爱恨情仇
首先大家应该区别 这两者是什么? python 是一门语言 pycharm 是工具 还得交待的是 可以编译python的工具 不止这一款 比如说--eclipse idea ... eclipse中 ...
- 解决 SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp的问题
连接数据库时 设置:zeroDateTimeBehavior=convertToNull
- 【Spring注解驱动开发】使用@PropertySource加载配置文件,我只看这一篇!!
写在前面 很多小伙伴都在问:冰河,你的Spring专题更新完了吗?怎么感觉像是写了一半啊?我:没有更新完呀,整个专题预计会有70多篇.那怎么更新了一半就去写别的了呢?那是因为有很多其他的小伙伴在后台留 ...