You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB中按5.0/4.0/3.0/SC顺序排序propertyRating字段的方法

解决方案

问题出在MongoDB的类型排序规则:字符串类型的"SC"在降序排序时会排在数字类型的5.0/4.0/3.0之前。要实现指定顺序,需要通过自定义权重字段来控制排序逻辑:

  1. 在聚合管道中添加$addFields阶段,给不同的propertyRating值分配对应的排序优先级:
    • 5.0 → 4(最高优先级)
    • 4.0 → 3
    • 3.0 → 2
    • SC → 1(最低优先级)
  2. 按这个权重字段降序排序,就能得到你要的顺序。

修改后的聚合管道PHP代码如下:

Array
(
    [0] => Array
        (
            [$match] => Array
                (
                    [total_charges] => Array
                        (
                            [$gt] => 0
                        )

                )

        )

    [1] => Array
        (
            [$addFields] => Array
                (
                    [sortPriority] => Array
                        (
                            [$switch] => Array
                                (
                                    [branches] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [case] => Array
                                                        (
                                                            [$eq] => Array
                                                                (
                                                                    [0] => $propertyRating
                                                                    [1] => 5.0
                                                                )

                                                        )

                                                    [then] => 4
                                                )

                                            [1] => Array
                                                (
                                                    [case] => Array
                                                        (
                                                            [$eq] => Array
                                                                (
                                                                    [0] => $propertyRating
                                                                    [1] => 4.0
                                                                )

                                                        )

                                                    [then] => 3
                                                )

                                            [2] => Array
                                                (
                                                    [case] => Array
                                                        (
                                                            [$eq] => Array
                                                                (
                                                                    [0] => $propertyRating
                                                                    [1] => 3.0
                                                                )

                                                        )

                                                    [then] => 2
                                                )

                                            [3] => Array
                                                (
                                                    [case] => Array
                                                        (
                                                            [$eq] => Array
                                                                (
                                                                    [0] => $propertyRating
                                                                    [1] => "SC"
                                                                )

                                                        )

                                                    [then] => 1
                                                )

                                        )

                                    [default] => 0
                                )

                        )

                )

        )

    [2] => Array
        (
            [$sort] => Array
                (
                    [sortPriority] => -1
                )

        )

    [3] => Array
        (
            [$skip] => 0
        )

    [4] => Array
        (
            [$limit] => 20
        )

    // 如果不需要返回sortPriority字段,可以添加$project阶段移除它
    // [5] => Array
    //     (
    //         [$project] => Array
    //             (
    //                 [sortPriority] => 0
    //                 // 这里列出你需要保留的其他字段,或者用1保留所有字段
    //                 [_id] => 1
    //                 [propertyRating] => 1
    //                 [total_charges] => 1
    //             )
    //     )
)

原理说明

  • $switch操作符根据propertyRating的不同值返回对应的权重数字,数字越大排序越靠前
  • 按sortPriority降序排序,就能保证5.0→4.0→3.0→SC的顺序
  • 如果不需要在结果中保留sortPriority字段,可以加上$project阶段将其排除

内容的提问来源于stack exchange,提问作者Mamta Malvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:43:11