$sortArray(数组表达式)

适用对象: MongoDB vCore

$sortArray 运算符用于对数组的元素进行排序。 当需要基于特定字段或条件对文档中的数组进行排序时,此运算符特别有用。 它可以应用于嵌入式文档数组或简单的值数组。

语法

$sortArray 运算符的语法如下所示:

{
  $sortArray: {
    input: <arrayExpression>,
    sortBy: <sortSpecification>
  }
}

参数

说明
input 要排序的数组。
sortBy 指定排序顺序。 这可以是单个字段,也可以是具有相应排序顺序的多个字段(1 表示升序,-1 表示降序)。

示例

让我们了解 stores 数据集中的示例 json 的用法。

{
  "_id": "d3c9df51-41bd-4b4e-a26b-b038d9cf8b45",
  "location": {
    "lat": -67.7571,
    "lon": 97.2505
  },
  "sales": {
    "totalSales": 149849,
    "salesByCategory": [
      {
        "categoryName": "DJ Speakers",
        "totalSales": 36972
      },
      {
        "categoryName": "DJ Headphones",
        "totalSales": 12877
      },
      {
        "categoryName": "Music Accessories",
        "totalSales": 40000
      },
      {
        "categoryName": "DJ Accessories",
        "totalSales": 60000
      }
    ]
  },
  "tag": [
    "#ShopLocal",
    "#FashionStore",
    "#SeasonalSale",
    "#FreeShipping",
    "#MembershipDeals"
  ]
}

示例 1:对嵌入文档数组进行排序

示例查询根据 totalSales 按降序对每个文档中的 sales.salesByCategory 数组进行排序。

db.stores.aggregate([
  {$match: {"_id": "d3c9df51-41bd-4b4e-a26b-b038d9cf8b45"} }
, {
    $project: {
      sortedSalesByCategory: {
        $sortArray: {
          input: "$sales.salesByCategory",
          sortBy: { totalSales: -1 }
        }
      }
    }
  }
])

该查询返回示例 json 的按 totalSales 排序的数组元素。

{
  "_id": "d3c9df51-41bd-4b4e-a26b-b038d9cf8b45",
  "sortedSalesByCategory": [
    { "categoryName": "DJ Accessories", "totalSales": 60000 },
    { "categoryName": "Music Accessories", "totalSales": 40000 },
    { "categoryName": "DJ Speakers", "totalSales": 36972 },
    { "categoryName": "DJ Headphones", "totalSales": 12877 }
  ]
}

- 查看用于从 MongoDB 迁移到 Azure Cosmos DB for MongoDB (vCore) 的选项 - 详细了解与 MongoDB 的功能兼容性