在Mysql中,我经常使用FIELD()
子句中的ORDER BY
函数:
ORDER BY FIElD(id, '1', '6', '3', ...);
如何在MongoDB中获得相同的结果?我尝试了以下方法:
.find(...).sort({id: [1, 6, 3]})
这不起作用
答案 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
]
]
]
);