对mongodb中的数据进行排序

问题描述 投票:0回答:1

我在 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 星数据进行排序。

php mongodb sorting
1个回答
0
投票

正如 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
之前。

© www.soinside.com 2019 - 2024. All rights reserved.