MongoDB - 如何组合两种排序

MongoDB - How to combine two Sorts

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

在 3 年内重新审视我自己的问题,我自己找到了一个巧妙的解决方案,只需要一个查询就可以解决这个问题。

鉴于特殊日期字段是 "stipulatedDate",我们将创建另一个用于特殊排序目的的日期字段,称为 "stipulatedDateSort"。这个是基于我们的第一个要求,但第二个是null。这将使我们有机会在 $sort 中有另一个 sort-by 字段来满足我们的第二个要求,从而使所有内容仅在一个查询中。

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

这是一个淘汰赛。