$bottom

适用对象: MongoDB vCore

$bottom 运算符根据指定的排序顺序返回组中的底部元素。 如果要根据每个组中的某些条件查找排名最低的文档,则它很有用。

语法

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

{
  $bottom: {
    sortBy: { <field1>: <sort order>, <field2>: <sort order>, ... },
    output: <expression>
  }
}

参数

DESCRIPTION
sortBy 指定要按其排序的字段和排序顺序。 将 1 用于升序,-1 降序。
output 一个表达式,指定排序顺序底部元素的输出。

示例:

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

{
  "_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
  "name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
  "location": {
    "lat": 70.1272,
    "lon": 69.7296
  },
  "staff": {
    "totalStaff": {
      "fullTime": 19,
      "partTime": 20
    }
  },
  "sales": {
    "totalSales": 151864,
    "salesByCategory": [
      {
        "categoryName": "Sound Bars",
        "totalSales": 2120
      },
      {
        "categoryName": "Home Theater Projectors",
        "totalSales": 45004
      },
      {
        "categoryName": "Game Controllers",
        "totalSales": 43522
      },
      {
        "categoryName": "Remote Controls",
        "totalSales": 28946
      },
      {
        "categoryName": "VR Games",
        "totalSales": 32272
      }
    ]
  }
}

示例 1:查找总销售额最低的商店

查找所有商店中总销售额最低的商店。

db.stores.aggregate([
  {
    $group: {
      _id: null,
      bottomStore: {
        $bottom: {
          sortBy: { "sales.totalSales": 1 },
          output: {
            storeId: "$_id",
            storeName: "$name",
            totalSales: "$sales.totalSales"
          }
        }
      }
    }
  }
])

这将生成以下输出:

[
  {
    _id: null,
    bottomStore: {
      storeId: '27d12c50-ef9b-4a1e-981f-2eb46bf68c70',
      storeName: 'Boulder Innovations | Electronics Closet - West Freddy',
      totalSales: 404106
    }
  }
]

示例 2:查找每个商店表现最差的类别

查找每个具有多个类别的商店中销售额最低的类别。

db.stores.aggregate([
  { $unwind: "$sales.salesByCategory" },
  { $match: { "sales.salesByCategory.totalSales": { $exists: true } } },
  {
    $group: {
      _id: "$_id",
      storeName: { $first: "$name" },
      lowestCategory: {
        $bottom: {
          sortBy: { "sales.salesByCategory.totalSales": 1 },
          output: {
            categoryName: "$sales.salesByCategory.categoryName",
            totalSales: "$sales.salesByCategory.totalSales"
          }
        }
      }
    }
  }
])

这将生成显示每个商店性能最低的类别的输出:

[
  {
    _id: 'b1d86d1f-8705-4157-b64c-a9eda0df4921',
    storeName: 'VanArsdel, Ltd. | Baby Products Haven - West Kingfort',
    lowestCategory: { categoryName: 'Baby Monitors', totalSales: 49585 }
  },
  {
    _id: '22e6367e-8341-415f-9795-118d2b522abf',
    storeName: 'Adatum Corporation | Outdoor Furniture Mart - Port Simone',
    lowestCategory: { categoryName: 'Outdoor Benches', totalSales: 4976 }
  },
.
.
.
.
]