有没有办法让一个查找操作的文档以这种方式排序: propertyA为true的第一个文档,按propertyB降序排序。 那么propertyA是false的文件按propertyC降序排序?
例如:
{ id:1, propA: false, propB: 1, propC: 4}
{ id:2, propA: false, propB: 2, propC: 1}
{ id:3, propA: true, propB: 8, propC: 2}
{ id:4, propA: false, propB: 4, propC: 3}
{ id:5, propA: true, propB: 7, propC: 5}
应按此方式排序:
{ id:3, propA: true, propB: 8, propC: 2}
{ id:5, propA: true, propB: 7, propC: 5}
{ id:1, propA: false, propB: 1, propC: 4}
{ id:4, propA: false, propB: 4, propC: 3}
{ id:2, propA: false, propB: 2, propC: 1}
答案 0 :(得分:0)
序数排序是不够的,但您可以使用聚合框架来评估您的第二个排序属性。使用$addFields的$cond可以根据您的情况添加新字段。整个操作如下所示:
db.myCollection.aggregate([
{
$addFields: {
thenByProperty: {
$cond: { if: "$propA", then: "$propB", else: "$propC" }
}
}
},
{
$sort: {
propA: -1,
thenByProperty: -1
}
}
])