C# Mongo DB 修改多层嵌套集合中的字段
2024-08-24 23:58:30
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);
}
第一次写问随笔没什么经验 ^ - ^
最新文章
- android笔记:获取View组件宽度以及ViewTreeObserver
- nginx_tomcat负载均衡环境
- VC6.0读取Excel文件数据
- Spring读书笔记-----Spring的Bean之Bean的基本概念
- Linear Regression
- Java:正则表达式的详解
- 【转】一致性hash算法(consistent hashing)
- oracle sysdba用户远程登录
- GridBagLayout占多行效果注意
- poj 1743
- eclipse CDT unresolved inclusion
- CUDA Cuts: Fast Graph Cuts on the GPU
- JSON WEB Token(JWT)
- ltp-ddt nor qspi spi调试中需要修改的地方
- java数字转IP 一行
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型
- python 06
- lvs-dr
- AtCoder Grand Contest 11~17 做题小记
- (PMP)第12章-----项目采购管理