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 修改多层嵌套集合中的字段的更多相关文章

  1. iOS开发-多层嵌套block中如何使用__weak和__strong

    1.关于__weak__weak只能在ARC模式下使用,也只能修饰对象(比如NSString等),不能修饰基本数据类型(比如int等)__weak修饰的对象在block中不可以被重新赋值.__weak ...

  2. JsonPath:从多层嵌套Json中解析所需要的值

    问题 应用中,常常要从嵌套的JSON串中解析出所需要的数据.通常的做法是,先将JSON转换成Map, 然后一层层地判空和解析.可使用 JsonPath 来解决这个问题. 给定一个 JSON 串如下所示 ...

  3. 增强 用文本增强修改SAP标准屏幕中的字段名称 属于元素的文本增强

    如果想要改变标准屏幕中的字段名称,如把物料主数据基本数据元素的名字改为我们想要的名字 . 1.首先,事务MM03进入物料主数据的基本数据2视图中,将鼠标光标放在需要更改的字段“页格式”上,然后按F1键 ...

  4. java多层嵌套集合的json,如何获取多层集合中所需要的value

    就很简单的一个问题折磨了整整一天,好在压抑的心情终于释放了,终于闲下来觉得是不是应该记录一下. 首先这个json串是从外网接口返回的数据,想要了解的朋友们可以复制到json解析器中看一下格式:http ...

  5. list集合中指定字段去重

    在开发中,有时会需要指定字段去重,以下为实现方法: 假设有个房地产权的类,其中宗地代码ZDDM值重复,而我们在前端页面显示时,只需要一条数据,因为公共字段都一样: IEqualityComparer需 ...

  6. log4j打印错误日志输出 利用sql取出的值放在list集合中,集合中的字段类型为映射类类型

    public ServiceResult<List<KefuDetail>> MaxRespondtime(Date startDate,Date endDate, Strin ...

  7. ajaxGird修改一条记录中的字段

    var rowData = ajaxgrid.getSelectedRow(); var quality = rowData["quality"]; var rowIndex = ...

  8. Mongo DB 2.6 需要知道的一些自身限定

    在现实的世界中,任何事情都有两面性,在程序的世界中,亦然! 我们不论是在使用一门新的语言,还是一门新的技术,在了解它有多么的让人兴奋,让人轻松,多么的优秀之余,还是很有必要了解一些他的局限性,方便你在 ...

  9. pythong中的全局变量的调用和嵌套函数中变量的使用

    全局变量调用:想要在自定义的函数中使用全局变量,就得要在函数用关键字global声明,然后就可以对全局变量进行修改.嵌套函数中的变量的调用:要在嵌套的变量中,使用nonlocal的声明'''num = ...

随机推荐

  1. jboss在eclipse里一直是starting解决方法之一

    jboss\server\default\deploy\jboss-web.deployer\server.xml中的端口设置必须与eclipse中jboss的端口设置的一直.否则就算可以访问 一会在 ...

  2. PHP 函数实例讲解

    PHP 函数 PHP 的真正威力源自于它的函数. 在 PHP 中,提供了超过 1000 个内建的函数. PHP 内建函数 如需查看所有数组函数的完整参考手册和实例,请访问我们的 PHP 参考手册. P ...

  3. 使用 MySQLi 和 PDO 向 MySQL 插入多条数据

    PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...

  4. Python 字典(Dictionary) clear()方法

    Python 字典(Dictionary) clear()方法 描述 Python 字典(Dictionary) clear() 函数用于删除字典内所有元素.高佣联盟 www.cgewang.com ...

  5. Python List cmp()方法

    描述 cmp() 方法用于比较两个列表的元素.高佣联盟 www.cgewang.com 语法 cmp()方法语法: cmp(list1, list2) 参数 list1 -- 比较的列表. list2 ...

  6. PHP strcasecmp() 函数

    实例 比较两个字符串(不区分大小写): <?php高佣联盟 www.cgewang.comecho strcasecmp("Hello world!","HELLO ...

  7. zabbix脚本发送邮件告警

    目录 zabbix邮箱告警 内部使用第三方邮箱发送邮箱告警 zabbix使用第三方邮箱发送告警 通过脚本使用第三方邮箱发送邮箱告警 zabbix邮箱告警 环境说明: zabbix服务端 192.168 ...

  8. 006_go语言中的if else条件语句

    代码演示 package main import "fmt" func main() { if 7%2 == 0 { fmt.Println("7 is even&quo ...

  9. 利用Python实现定时发送邮件,实现一款营销工具

    说起自动化绝对算是茶余饭后最有显B格的谈资,毕竟解放双手是从老祖先那里就流传下来的基因,都2020了,你每天上班还要登录各个邮箱账号查收邮件?快来解锁本章内容 整体思路 很多人学习python,不知道 ...

  10. 利用mybatis的Generator的插件生成代码

    1 在resources文件夹下创建generatorConfig.xml文件来做相关配置 <?xml version="1.0" encoding="UTF-8& ...