Pra*_*iya 6 mongodb mongodb-query aggregation-framework
select * from users ORDER BY FIELD(status, 'A', 'B', 'C', 'D') ASC;
Run Code Online (Sandbox Code Playgroud)
这将根据所有用户的状态对所有用户进行排序,以便所有状态为"A"的用户先来"B",依此类推.MongoDB中的等价物是什么?
$project在MongoDB术语中,您需要按顺序为每个值"加权",这意味着.aggregate()方法:
db.users.aggregate([
{ "$project": {
"status": 1,
"a_field": 1,
"another_field": 1,
"pretty_much_every_field": 1,
"weight": {
"$cond": [
{ "$eq": [ "$status", "A" ] },
10,
{ "$cond": [
{ "$eq": [ "$status", "B" ] },
8,
{ "$cond": [
{ "$eq": [ "$status", "C" ] },
6,
{ "$cond": [
{ "$eq": [ "$status", "D" ] },
4,
0
]}
]}
]}
]
}
}},
{ "$sort": { "weight": -1 } }
])
Run Code Online (Sandbox Code Playgroud)
嵌套使用三元组 $cond允许"状态"的每个项目按照给定参数的顺序被视为有序"权重"值.
这反过来被馈送到$sort,其中投影值("权重")用于按加权匹配对得分进行排序.
因此,通过这种方式,优先考虑"状态"匹配的顺序,其首先出现在排序结果中.
小智 0
排序 ASC -> 状态:1
db.users.find().sort( { status: 1 } )
Run Code Online (Sandbox Code Playgroud)
对 DESC 进行排序 -> 状态:-1
db.users.find().sort( { status: -1 } )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |