Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’opérateur $bottomN trie les documents sur un ou plusieurs champs spécifiés par la requête et retourne les derniers documents N correspondant aux critères de filtrage.
Syntaxe
{
$bottomN: {
output: [listOfFields],
sortBy: {
<fieldName>: < sortOrder >
},
n: < numDocumentsToReturn >
}
}
Paramètres
| Paramètre | Descriptif |
|---|---|
listOfFields |
Liste des champs à renvoyer pour le dernier document du jeu de résultats |
fieldName |
Champ à utiliser pour trier le jeu de résultats |
sortOrder |
1 ou -1. 1 implique le tri dans l’ordre croissant de la valeur du champ, tandis que -1 implique le tri dans l’ordre décroissant des valeurs du champ |
n |
Nombre de documents à retourner à partir du bas du jeu de résultats trié |
Examples
Considérez cet exemple de document de la collection de magasins.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Exemple 1 : Rechercher les deux magasins inférieurs par total des ventes
Pour déterminer les deux magasins de la société First Up Consultants avec les ventes les plus faibles, exécutez une requête pour récupérer des magasins dans la société « First Up Consultants », triez les documents résultants dans l’ordre décroissant des ventes totales et retournez les deux derniers documents du jeu de résultats trié.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$group: {
_id: "$company",
bottomSales: {
$bottomN: {
output: ["$company", "$sales"],
sortBy: {
"sales.revenue": -1
},
n: 2
}
}
}
}])
Cette requête retourne le résultat suivant :
[
{
"_id": "First Up Consultants",
"bottomSales": [
[
"First Up Consultants",
{
"salesByCategory": [
{
"categoryName": "Skirts",
"totalSales": 109
}
],
"revenue": 109
}
],
[
"First Up Consultants",
{
"salesByCategory": [
{
"categoryName": "Mirrors",
"totalSales": 120
}
],
"revenue": 120
}
]
]
}
]
Exemple 2 : Rechercher les deux catégories inférieures par total des ventes au sein de chaque magasin
Pour déterminer les deux catégories les plus performantes par ventes totales au sein de chaque magasin, exécutez une requête pour récupérer des documents avec au moins deux catégories de ventes, triez les catégories dans l’ordre décroissant des ventes totales et retournez enfin les deux catégories inférieures par magasin.
db.stores.aggregate([{
$unwind: "$sales.salesByCategory"
}, {
$match: {
"sales.salesByCategory.totalSales": {
$exists: true
}
}
}, {
$group: {
_id: "$_id",
storeName: {
$first: "$name"
},
categoryCount: {
$sum: 1
},
bottomTwoCategories: {
$bottomN: {
n: 2,
sortBy: {
"sales.salesByCategory.totalSales": -1
},
output: {
categoryName: "$sales.salesByCategory.categoryName",
totalSales: "$sales.sale"
}
}
}
}
}, {
$match: {
categoryCount: {
$gte: 2
}
}
}])
Le premier résultat retourné par cette requête est :
[
{
"_id": "64ec6589-068a-44a6-be5b-9d37bb0a90f1",
"storeName": "First Up Consultants | Computer Gallery - West Cathrine",
"categoryCount": 8,
"bottomTwoCategories": [
{
"categoryName": "Gaming Controllers",
"totalSales": null
},
{
"categoryName": "Network Adapters",
"totalSales": null
}
]
}
]
Contenu connexe
- Passez en revue les options de migration de MongoDB vers Azure Cosmos DB pour MongoDB (vCore).
- En savoir plus sur la compatibilité des fonctionnalités avec MongoDB.