使用mongo进行多次排序

时间:2017-11-07 10:09:29

标签: mongodb sorting aggregate

当我在mongo的聚合方法中使用多重排序时,结果不会以正确的方式排序。这是我的问题:

db.MyCollection.aggregate(
{
    "$unwind": "$objects"
},
{
    "$lookup": {
        "from": "CollectionA",
        "localField": "objects.itemId",
        "foreignField": "_id",
        "as": "itemOne"
    }
},
{
    "$lookup": {
        "from": "CollectionB",
        "localField": "user_id",
        "foreignField": "id",
        "as": "users"
    }
},
{
    "$lookup": {
        "from": "CollectionC",
        "localField": "objects.itemName",
        "foreignField": "name",
        "as": "itemTwo"
    }
},
{
    "$addFields": {
        "item": {
            "$arrayElemAt": [
                "$itemOne",
                0
            ]
        },
        "user": {
            "$arrayElemAt": [
                "$users",
                0
            ]
        },
        "itemP": {
            "$arrayElemAt": [
                "$itemTwo",
                0
            ]
        }
    }
},
{
    "$addFields": {
        "itemName": {
            "$ifNull": [
                "$item.name",
                "$objects.itemName"
            ]
        },
        "userName": {
            "$concat": [
                "$user.firstname",
                " ",
                "$user.lastname"
            ]
        }
    }
},
{
    "$match": {
        "client_id": 2
    }
},
{
    "$skip": 1
},
{
    "$limit": 10
},
{
    "$project": {
       "date": "$objects.date",
       "state": "$objects.state"
    }
},
{
    "$sort": { 
        "objects.state": 1,
        "objects.date": 1,
    }
}

)

准确地说:"日期"字段是日期类型和"状态"字段是数字类型。 如果我只使用一种:结果顺序是正确的。但是如果我使用2种排序,结果就不能正确排序。你有什么想法,为什么?

1 个答案:

答案 0 :(得分:0)

正如@Neil Lunn所说: 它们没有正确排序,因为您重命名了$ project中的字段。所以它应该是{$ sort:{state:1,date:1}}