.Net MongoDB批量修改集合中子集合的字段
环境:.Net Core 3.1 (需要导入.Net MongoDB的驱动)
模型
/// <summary>
/// 收藏
/// </summary>
public class CtStreetFollow
{
/// <summary>
/// 收藏人编号
/// </summary>
public long Id { get; set; } /// <summary>
/// 收藏
/// </summary>
public List<StreetFollow> StreetFollows { get; set; }
} /// <summary>
/// 收藏
/// </summary>
public class StreetFollow
{
/// <summary>
/// 尾货编号
/// </summary>
public long StreetId { get; set; } /// <summary>
/// 卖家编号
/// </summary>
public long UserId { get; set; } /// <summary>
/// 置顶
/// </summary>
public int Top { get; set; }
}
代码:
public async Task SetTop(long userId, List<long> productIds, bool isTop)
{
var bson = MakeUpdateParam("$set", nameof(CtStreetFollow.StreetFollows),
new[]
{
new KeyValuePair<string, object>(nameof(StreetFollow.Top),
),
});
await UpdateData(nameof(CtStreetFollow.StreetFollows), productIds, "$in", _collection, bson);
}
/// <summary>
/// 用户数据修改统一更新
/// </summary>
/// <returns></returns>
internal async Task UpdateData(string arrayName, List<long> productIds, string myOperator, IMongoCollection<CtStreetFollow> col, BsonDocument bson)
{
var filters = Builders<CtStreetFollow>.Filter.ElemMatch(arrayName, Builders<StreetFollow>.Filter.In(p => p.StreetId, productIds));
await col.UpdateManyAsync(filters, bson, new UpdateOptions
{
ArrayFilters = new List<ArrayFilterDefinition> { new BsonDocumentArrayFilterDefinition<CtStreetFollow>(MakeSimpleUpdateArrayFilter(nameof(StreetFollow.StreetId), productIds, myOperator))
}
});
} /// <summary>
/// 合成bson
/// </summary>
/// <returns></returns>
public BsonDocument MakeUpdateParam(string myOperator, string arrayField, KeyValuePair<string, object>[] innerFvs)
{ return new BsonDocument(new Dictionary<string, object>
{
{myOperator, new BsonDocument(innerFvs.ToDictionary(p=>$"{arrayField}.$[elem].{p.Key}", p=>p.Value))}
}); } /// <summary>
/// 构造简单的数组过滤BSON
/// 支持单字段,简单操作符
/// 数组子项别买
/// </summary>
/// <param name="field">数组子项中的字段</param>
/// <param name="value">字段值</param>
/// <param name="myOperator">简单操作符</param>
/// <returns></returns>
public BsonDocument MakeSimpleUpdateArrayFilter(string field, object value, string myOperator)
{ return new BsonDocument(new Dictionary<string, object>
{
{$"elem.{field}", new BsonDocument(new Dictionary<string, object>
{
{myOperator, value}
})}
});
}
.Net MongoDB批量修改集合中子集合的字段的更多相关文章
- mongodb 批量修改
db.getCollection(').find({}).forEach( function(item) { item.date = item.date.replace("2018-11-2 ...
- SQL替换语句 批量修改、增加、删除字段内容
sql替换语句,用该命令可以整批替换某字段的内容,也可以批量在原字段内容上加上或去掉字符. 命令总解:update 表的名称 set 此表要替换的字段名=REPLACE(此表要替换的字段名, '原来内 ...
- SQL替换语句之批量修改、增加、删除字段内容
语法 REPLACE ( original-string, search-string, replace-string ) 用法 update 表的名称 set 替换字段=REPLACE(替换字段,原 ...
- sql取逗号前后数据与批量修改某一字段某一值
sql取逗号后的值 SELECT SUBSTRING_INDEX(字段,) FROM 表名 sql取逗号前的值 SELECT SUBSTRING_INDEX(字段,) FROM 表名 批量修改 UPD ...
- C# 如何批量修改集合元素的属性值?
我们往往会遇到要批量修改集合中元素的值,最笨的办法就是foreach循环,但本文介绍几种优雅的方法. 首先,我们准备好元素类和初始集合: 下面就是几种方法,目前并没有对性能做进一步的测试,有兴趣的童鞋 ...
- springmvc使用list集合实现商品列表的批量修改
1将表单的数据绑定到List 1.1 需求 实现商品数据的批量修改. 1.2 需求分析 要想实现商品数据的批量修改,需要在商品列表中可以对商品信息进行修改,饼干且可以批量提交修改后的商品数据. 1.3 ...
- 【MongoDB】3.详细命令集合
[注意:MongoDB自动将_id字段设置为主键] -------------------------------------------------------------------------- ...
- 【Mongodb】聚合查询 && 固定集合
概述 数据存储是为了可查询,统计.若数据只需存储,不需要查询,这种数据也没有多大价值 本篇介绍Mongodb 聚合查询(Aggregation) 固定集合(Capped Collections) 准备 ...
- MongoDB(4)- Collection 集合相关
Collection MongoDB 将文档存储在集合中 集合存储在 Database 中 集合类似于关系数据库(Mysql)中的表 如果集合不存在,则 MongoDB 会在第一次存储该集合数据时创建 ...
随机推荐
- Python无限循环
Python 无限循环:在 while 循环语句中,可以通过让判断条件一直达不到 False ,实现无限循环. 条件表达式: # var = 1 # while var == 1: # 表达式永远为 ...
- 自述:转职IT ,痛苦一阵子;不转职IT,痛苦一辈子(第一章)
作为一个从后期制作转职过来的Java工程师,我认为我是幸运的,虽然我的本科专业(影视后期)也是火爆行业,不愁工作,但我不后悔进入这个IT坑,毕竟转行,只痛苦一阵子,但是不转行,可能我会痛苦一辈子. 我 ...
- Python List insert()方法
描述 insert() 函数用于将指定对象插入列表的指定位置.高佣联盟 www.cgewang.com 语法 insert()方法语法: list.insert(index, obj) 参数 inde ...
- PHP gettimeofday() 函数
------------恢复内容开始------------ 实例 返回当前时间: <?php// Print the array from gettimeofday()print_r(gett ...
- PHP mysqli_thread_id() 函数
返回当前连接的线程 ID,然后杀死连接: <?php 高佣联盟 www.cgewang.com // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli ...
- 珍藏多年的学习资料300G+,赶紧免费领取,从此离大神更进一步
将时间线拉到2014 2014年的寒冬,每天早晨六点钟,都会一个弱小的身影,从学校寝室出发,走在去实习公司的路上.经过食堂边的包子铺,他会顺手买两个包子,一杯豆浆,老板也会像往常一样热情的吆喝 ...
- luogu P5325 Min_25筛
LINK:Min_25筛 新版感觉有点鬼畜 而且旧版的也够用了至少. 这个并不算很简单也不算很困难的知识点 学起来还是很麻烦的. (误入了很多dalao的blog 说的云里雾里的 甚是懵逼 这里推荐几 ...
- Java主类的装载
在JavaMain()函数中调用LoadMainClass()函数加载Java主类.LoadMainClass()函数的实现如下: /* * Loads a class and verifies th ...
- Pandas 数据处理 | Datetime 在 Pandas 中的一些用法!
Datatime 是 Python 中一种时间数据类型,对于不同时间格式之间的转换是比较方便的,而在 Pandas 中也同样支持 DataTime 数据机制,可以借助它实现许多有用的功能,例如 1,函 ...
- 微信小程序订阅消息调研
相关资料 背景:微信模板消息已正式下架,改为订阅消息,详情如下: 服务变更通知 订阅消息:订阅消息相关内容如下: 订阅消息 接口设计 获取接口访问凭证 :根据appId和secret获取接口访问凭证a ...