适用对象:
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 }
},
.
.
.
.
]