.Net MongoDB批量修改集合中子集合的字段
2024-08-29 08:21:46
环境:.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}
})}
});
}
最新文章
- 更换Mac记录
- Forwards on Weibo (30)
- Oracle systemstate dump介绍
- Find和FirstOrDefault()有什么区别?
- JavaScript+CSS实现经典的树形导航栏
- 导出Excel文件,npoi方式和通过microsoft.visual basic.dll
- MySQL ERROR 1045错误解决办法
- Accordion( 分类) 组件
- phpcms:二、头部尾部包含
- zoj 1067
- Java网络编程:利用Java mail包发送电子邮件
- mysql 结果集合切换
- iOS开发之监听键盘高度的变化
- HDU 3782 xxx定律
- iOS8中 UITableView section 分区头部视图不显示
- Pdf File Writer 中文应用(PDF文件编写器C#类库)
- [Linux] PHP程序员玩转Linux系列-升级PHP到PHP7
- Postman----request的body中实现数据驱动
- vue中v-for的使用
- 初识 Nginx