将结果的一部分分成另一部分

时间:2017-12-25 15:41:43

标签: mongodb sorting

有没有办法让一个查找操作的文档以这种方式排序: 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}

1 个答案:

答案 0 :(得分:0)

序数排序是不够的,但您可以使用聚合框架来评估您的第二个排序属性。使用$addFields$cond可以根据您的情况添加新字段。整个操作如下所示:

db.myCollection.aggregate([
    { 
        $addFields: {
            thenByProperty: {
                $cond: { if: "$propA", then: "$propB", else: "$propC" }
            }
        } 
    },
    {
        $sort: {
            propA: -1,
            thenByProperty: -1
        }
    }
])