我在 mongodb 中有一个名为 propertyRating 的字段,其值为 5.0/4.0/3.0/SC。
我想根据propertyRating对数据进行排序, 首先是 5 星,然后是 4 星,3 星,最后是 SC。
有什么办法可以将数据按5,4,3然后SC排序。
我用过,
Array
(
[0] => Array
(
[$match] => Array
(
[total_charges] => Array
(
[$gt] => 0
)
)
)
[1] => Array
(
[$sort] => Array
(
[propertyRating] => -1
)
)
[2] => Array
(
[$skip] => 0
)
[3] => Array
(
[$limit] => 20
)
)
首先对 SC 值数据进行排序,然后对 5、4、3 星数据进行排序。
正如 ray 建议的那样,“您需要将字符串映射到一些小于 3 的值”。因此,创建一个用于排序的字段,并将值设置为适当的值,例如当值为“SC”时,
-1.0
。
这是一个聚合管道来做到这一点:
db.collection.aggregate([
{
// set `propertyRatingSort` to -1.0 when it's "SC"
// otherwise use the value as-is
$set: {
propertyRatingSort: {
$cond: [
{ $eq: ["$propertyRating", "SC"] },
-1.0,
"$propertyRating"
]
}
}
},
// sort descending using the created sort field
{ $sort: { propertyRatingSort: -1 } },
// remove the extra field
{ $unset: "propertyRatingSort" }
])
将您的
$match total_charges > 0
阶段放在上面第一个 $set
之前。