环境:.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批量修改集合中子集合的字段的更多相关文章

  1. mongodb 批量修改

    db.getCollection(').find({}).forEach( function(item) { item.date = item.date.replace("2018-11-2 ...

  2. SQL替换语句 批量修改、增加、删除字段内容

    sql替换语句,用该命令可以整批替换某字段的内容,也可以批量在原字段内容上加上或去掉字符. 命令总解:update 表的名称 set 此表要替换的字段名=REPLACE(此表要替换的字段名, '原来内 ...

  3. SQL替换语句之批量修改、增加、删除字段内容

    语法 REPLACE ( original-string, search-string, replace-string ) 用法 update 表的名称 set 替换字段=REPLACE(替换字段,原 ...

  4. sql取逗号前后数据与批量修改某一字段某一值

    sql取逗号后的值 SELECT SUBSTRING_INDEX(字段,) FROM 表名 sql取逗号前的值 SELECT SUBSTRING_INDEX(字段,) FROM 表名 批量修改 UPD ...

  5. C# 如何批量修改集合元素的属性值?

    我们往往会遇到要批量修改集合中元素的值,最笨的办法就是foreach循环,但本文介绍几种优雅的方法. 首先,我们准备好元素类和初始集合: 下面就是几种方法,目前并没有对性能做进一步的测试,有兴趣的童鞋 ...

  6. springmvc使用list集合实现商品列表的批量修改

    1将表单的数据绑定到List 1.1 需求 实现商品数据的批量修改. 1.2 需求分析 要想实现商品数据的批量修改,需要在商品列表中可以对商品信息进行修改,饼干且可以批量提交修改后的商品数据. 1.3 ...

  7. 【MongoDB】3.详细命令集合

    [注意:MongoDB自动将_id字段设置为主键] -------------------------------------------------------------------------- ...

  8. 【Mongodb】聚合查询 && 固定集合

    概述 数据存储是为了可查询,统计.若数据只需存储,不需要查询,这种数据也没有多大价值 本篇介绍Mongodb 聚合查询(Aggregation) 固定集合(Capped Collections) 准备 ...

  9. MongoDB(4)- Collection 集合相关

    Collection MongoDB 将文档存储在集合中 集合存储在 Database 中 集合类似于关系数据库(Mysql)中的表 如果集合不存在,则 MongoDB 会在第一次存储该集合数据时创建 ...

随机推荐

  1. python数据处理书pdf版本|内附网盘链接直接提取|

    Python数据处理采用基于项目的方法,介绍用Python完成数据获取.数据清洗.数据探索.数据呈现.数据规模化和自动化的过程.主要内容包括:Python基础知识,如何从CSV.Excel.XML.J ...

  2. 牛客练习赛63 牛牛的树行棋 差分 树上博弈 sg函数

    LINK:牛牛的树行棋 本来是不打算写题解的. 不过具体思考 还是有一段时间的. 看完题 一直想转换到阶梯NIM的模型上 转换失败. 考虑SG函数. 容易发现 SG函数\(sg_x=max{sg_{t ...

  3. 剑指 Offer 57. 和为s的两个数字

    本题 题目链接 题目描述 我的题解 双指针 思路分析 因为该数组是递增数组,所以我们可以用双指针法. 声明指针left 和 right分别指向数组的头(数组下标为0)和尾(数组下标为length-1) ...

  4. 项目积累————关于map的getOrDefault用法

    今天在学习领导的编程手法时,注意到了以前没用过的一个方法,那就是map的getOrDefault,看了一下感觉这个方法的用途还是非常广泛的,比如可以实现一个简单的通讯录的功能.下面看我写的一个测试类. ...

  5. .Net小白的第一篇博文

    说起来也比较惭愧,5个月之前,我早已创建了博客园账号,那时候的我雄心壮志,给自己定下了 很多目标.现在回想起来,除了体重的增长,头发的稀疏,似乎这段时间的消逝并没有带给我什么见识上的成长.哈哈,想必大 ...

  6. 排查JVM内存泄漏的命令

    1. jps 使用 jps -l -m 获取到当前jvm进程的pid,通过上述命令获取到了服务的进程号 jps(JVM Process Status Tool):显示指定系统内所有的HotSpot虚拟 ...

  7. Rx.js实现原理浅析

    前言 上次给大家分享了cycle.js的内容,这个框架核心模块的代码其实只有一百多行,要理解这个看似复杂的框架,其实最核心的是理解它依赖的异步数据流处理框架--rx.js.今天,给大家分享一下rx.j ...

  8. “随手记”开发记录day19

    将软件推荐给父母,先尝试使用软件,观察bug,若有啥不足的,才能及时修改.

  9. 9、Java 常用类 Math,Number子类,String,Character

    本小节主要介绍一些如何去使用Java提供的类如何去使用?如何在实战中使用?从来没有用过的如何去学习? 分享一下发哥的学习方法? 1.针对性的学习 在理解自己的需求或者要做某一块的内容后,有针对性,选择 ...

  10. Java高级篇XML和正则表达式

    常见的XML解析技术: 1.DOM(基于XML树结构,比较耗资源,适用于多次访问XML): 2.SAX(基于事件,消耗资源小,适用于数量较大的XML): 3.JDOM(比DOM更快,JDOM仅使用具体 ...