MongoDB - 如何组合两种排序

时间:2015-05-14 22:09:27

标签: mongodb aggregation-framework

我想在关键时刻规定排序:$ 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组成,我希望它以降序排序开始以利用索引。我将不胜感激任何建议!

1 个答案:

答案 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
    }
}
])

那是淘汰赛。