我想在关键时刻规定排序:$ currentDate。 这意味着,要按降序对旧日期进行排序,但将来的日期按升序排序。
---future---
18.5
17.5
16.5
---today---
14.5
13.5
12.5
---past---
成为:
---future---
16.5
17.5
18.5
---today--
14.5
13.5
12.5
---past---
它将使用聚合框架完成,可能由$ cond组成,我希望它以降序排序开始以利用索引。我将不胜感激任何建议!
答案 0 :(得分:0)
在3年内重新审视我自己的问题,我自己找到了一个简洁的解决方案,只用一个查询就可以做到这一点。
鉴于特殊日期字段是" stipulatedDate" ,我们将为特殊排序目的创建另一个日期字段,名为" stipulatedDateSort&# 34; 。这个是基于我们的第一个要求,但第二个是 null 。这将使我们有机会在 $ sort 中有另一个排序字段来满足我们的第二个要求,从而只在一个查询中创建所有内容。
db.brands.aggregate([
{
$addFields: {
'activities.stipulatedDateSort': {
$cond: {
if: { $gt: [ '$activities.stipulatedDate', new Date() ] },
then: "$activities.stipulatedDate",
else: null
}
},
}
},
{
$sort: {
'activities.stipulatedDateSort': 1,
'activities.stipulatedDate': -1
}
}
])
那是淘汰赛。