环境:.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}
})}
});
}

最新文章

  1. 更换Mac记录
  2. Forwards on Weibo (30)
  3. Oracle systemstate dump介绍
  4. Find和FirstOrDefault()有什么区别?
  5. JavaScript+CSS实现经典的树形导航栏
  6. 导出Excel文件,npoi方式和通过microsoft.visual basic.dll
  7. MySQL ERROR 1045错误解决办法
  8. Accordion( 分类) 组件
  9. phpcms:二、头部尾部包含
  10. zoj 1067
  11. Java网络编程:利用Java mail包发送电子邮件
  12. mysql 结果集合切换
  13. iOS开发之监听键盘高度的变化
  14. HDU 3782 xxx定律
  15. iOS8中 UITableView section 分区头部视图不显示
  16. Pdf File Writer 中文应用(PDF文件编写器C#类库)
  17. [Linux] PHP程序员玩转Linux系列-升级PHP到PHP7
  18. Postman----request的body中实现数据驱动
  19. vue中v-for的使用
  20. 初识 Nginx

热门文章

  1. PHP user_error() 函数
  2. PHP strspn() 函数
  3. PHP strpbrk() 函数
  4. 剑指 Offer 58 - I. 翻转单词顺序
  5. VMware 虚拟机开机黑屏解决方法
  6. 通过源代码分析Mybatis的功能
  7. mysql启动报错,The server quit without updating PID file
  8. Qt 乱码
  9. 双下划线开头的attr方法
  10. excel-格式处理