.Net Core使用mongoDB原生语句。新增字段排序。AddFiled

需求: 拉黑记录  ------  表中有拉黑时间,有解封时间,需要排序优先展示封禁中的数据,再展示已经解封的数据。再按照拉黑时间倒叙。因为没有维护状态字段(需要定时轮询修改状态)。所以用语句原生新增字段排序。

mongo语句参考文档:https://dinghuiye.online/article/mongo-aggregate-statement
mongoDb语句:  db.BlackHouses.aggregate([{$match:{EnterDate:{$gte:1604822252}}},{$addFields:{is_Type:{$cond:[{ $gte:["$RevoverDate",1614676433]},1,0]}}}, {$sort:{is_Type: -1,EnterDate: -1}},{$skip: 0},{$limit: 50}])

操作简单介绍:
聚合操作(aggregation operations)可以理解为一系列计算操作的管道(pipeline,我认为翻译为流水线或执行流更容易理解),操作在管道中按阶段执行。操作有如:分组($group)、修改数据结构($project)、排序($sort)、计算数量($count)等,每个操作在管道中叫做阶段(stage),每个阶段执行的结果会给下一个阶段。当管道执行完毕后可以得到新的数据集合(doucments,mongon将一条数据或一条命令语句叫做document,都是BSON结构)。
其中每一个{}里包含的条件都是一个阶段

代码:
 因为需要新增字段排序。但是Linq的写法没找到。只能执行原生的写法。


IList<IPipelineStageDefinition> stages = new List<IPipelineStageDefinition>();
PipelineStageDefinition<BlackHouse, BlackHouse> stage1 = new JsonPipelineStageDefinition<BlackHouse, BlackHouse>("{$match:{" + string.Join(",", mongoSearchList) + "}}");
PipelineStageDefinition<BlackHouse, BlackHouse> stage2 = new JsonPipelineStageDefinition<BlackHouse, BlackHouse>("{$addFields:{is_Type" +
                    ":{$cond:[{$gte:[\"$RevoverDate\","+DateTime.Now.ToUnixTimestampBySeconds()+"]},1,0]}}}");
PipelineStageDefinition<BlackHouse, BlackHouse> stage3 = new JsonPipelineStageDefinition<BlackHouse, BlackHouse>("{$sort:{is_Type:-1,EnterDate:-1}}");
PipelineStageDefinition<BlackHouse, BlackHouse> stage4 = new JsonPipelineStageDefinition<BlackHouse, BlackHouse>("{$skip:" + pageSize * (pageIndex - 1) + "}");
PipelineStageDefinition<BlackHouse, BlackHouse> stage5 = new JsonPipelineStageDefinition<BlackHouse, BlackHouse>("{$limit:" + pageSize + "}"); 
if (mongoSearchList.Count > 0) stages.Add(stage1);
stages.Add(stage2);
stages.Add(stage3);
stages.Add(stage4);
stages.Add(stage5);
PipelineDefinition<BlackHouse, BlackHouse> pipeline = new PipelineStagePipelineDefinition<BlackHouse, BlackHouse>(stages);
var list = await DbContext.BlackHouses.Aggregate(pipeline).ToListAsync();
                


Mongo驱动提供的aggregate方法需要将参数。按照上面聚合原理。将每个{}内的阶段。拆分成 pipeline  然后执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值