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
}
}
])
这是一个淘汰赛。
我想规定排序成一个临界时间点:$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
}
}
])
这是一个淘汰赛。