如何在MongoDB中按字段值排序

时间:2014-03-24 11:13:28

标签: mongodb mongodb-query aggregation-framework

在Mysql中,我经常使用FIELD()子句中的ORDER BY函数:

ORDER BY FIElD(id, '1', '6', '3', ...);

如何在MongoDB中获得相同的结果?我尝试了以下方法:

.find(...).sort({id: [1, 6, 3]})

这不起作用

2 个答案:

答案 0 :(得分:2)

所以记录:

鉴于数组[1,6,3]您在查询中想要的是:

db.collection.aggregate([
   { "$project": {
       "weight": { "$cond": [
           { "$eq": ["_id": 1] },
           3, 
           { "$cond": [
               { "$eq": ["_id": 6] },
               2,
               { "$cond": [
                   { "$eq": ["_id": 3] },
                   1,
                   0
               ]},
           ]}, 
       ]}
   }},
   { "$sort": { "weight": -1 } }
])

这样就可以按照“项目”权重的“数组”顺序为结果提供特定的“权重”。

答案 1 :(得分:0)

我们可以使用$indexOfArray

控制台

db.collectionName.aggregate([{
    $match: {
        _id: {
            $in: [249, 244]
        }
    }
}, {
    $addFields: {
        sort: {
            $indexOfArray: [
                [249, 244], "$_id"
            ]
        }
    }
},{
    $sort: {
        sort: 1
    }
}])

PHP代码

$data = $this->mongo->{$collectionName}->aggregate(
    [
        [
            '$match' => ['_id' => ['$in' => $idList]]
        ],
        [
            '$addFields' => ['sort' => ['$indexOfArray' => [$idList, '$_id']]]
        ],
        [
            '$sort' => ['sort' => 1]
        ],
        [
            '$project' => [
                'name' => 1
            ]
        ]
    ]
);