MongoDB-如何组合两种排序

MongoDB-如何组合两种排序,mongodb,aggregation-framework,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组成,我更希望它以降序排序开始,以利用索引。我将感谢你的任何建议 三年后,

我想将排序规定为一个关键时间点:$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组成,我更希望它以降序排序开始,以利用索引。我将感谢你的任何建议

三年后,我重新审视了自己的问题,我自己找到了一个简洁的解决方案,只提出了一个问题

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
    }
}
])
如果特殊日期字段是“stipulatedDate”,我们将为特殊排序目的创建另一个日期字段,称为“stipulatedDateSort”。这个基于我们的第一个需求,但是第二个需求为空。这将使我们有机会在$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
    }
}
])

这真是太棒了。

我想说这是不可能的,因为
$sort
总是应用于所有文档。你最好做两个查询并合并结果。非常感谢Markus,我会这样做的