select * from users ORDER BY FIELD(status, 'A', 'B', 'C', 'D') ASC;
这将根据所有用户的状态对所有用户进行排序,以便所有具有状态' A'会先来,然后' B'等等。 MongoDB中的等价物是什么?
答案 0 :(得分:5)
你需要$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 } }
])
ternary $cond
的嵌套使用允许每个项目为" status"被视为有序"重量"按给定参数的顺序赋值。
这反过来被馈送到$sort
,其中投影值("权重")用于按加权匹配对结果进行排序。
因此,以这种方式优先考虑" status"的顺序。与排序结果中首先出现的匹配。
答案 1 :(得分:0)
对ASC进行排序 - >状态:1
db.users.find().sort( { status: 1 } )
对DESC进行排序 - >状态:-1
db.users.find().sort( { status: -1 } )