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); 
}

第一次写问随笔没什么经验 ^ - ^

最新文章

  1. android笔记:获取View组件宽度以及ViewTreeObserver
  2. nginx_tomcat负载均衡环境
  3. VC6.0读取Excel文件数据
  4. Spring读书笔记-----Spring的Bean之Bean的基本概念
  5. Linear Regression
  6. Java:正则表达式的详解
  7. 【转】一致性hash算法(consistent hashing)
  8. oracle sysdba用户远程登录
  9. GridBagLayout占多行效果注意
  10. poj 1743
  11. eclipse CDT unresolved inclusion
  12. CUDA Cuts: Fast Graph Cuts on the GPU
  13. JSON WEB Token(JWT)
  14. ltp-ddt nor qspi spi调试中需要修改的地方
  15. java数字转IP 一行
  16. Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
  17. python 06
  18. lvs-dr
  19. AtCoder Grand Contest 11~17 做题小记
  20. (PMP)第12章-----项目采购管理

热门文章

  1. MacOS IDEA下SVN配置与使用
  2. 什么是 PHP 过滤器?
  3. PHP sort() 函数
  4. ABPHelper.CLI及其依赖项简单介绍
  5. SpringBoot之Quartz实战
  6. asp.net 远程模型验证
  7. 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
  8. nvcc fatal : Path to libdevice library not specified
  9. springboot多环境配置文件
  10. JDBC工具类—如何封装JDBC