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 $minN est utilisé pour récupérer les valeurs N inférieures d’un champ en fonction d’un critère de filtrage spécifié.
Syntaxe
$minN: {
input: < field or expression > ,
n: < number of values to retrieve >
}
Paramètres
| Paramètre | Descriptif |
|---|---|
input |
Spécifie le champ ou l’expression à évaluer pour les valeurs minimales. |
n |
Spécifie le nombre de valeurs minimales à récupérer. Ce doit être un entier positif. |
Examples
Considérez cet exemple de document de la collection des magasins.
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
"location": {
"lat": 60.1441,
"lon": -141.5012
},
"staff": {
"totalStaff": {
"fullTime": 2,
"partTime": 0
}
},
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Headphones",
"totalSales": 35921
}
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Bargain Blitz Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 11
},
"endDate": {
"Year": 2024,
"Month": 2,
"Day": 18
}
},
"discounts": [
{
"categoryName": "DJ Turntables",
"discountPercentage": 18
},
{
"categoryName": "DJ Mixers",
"discountPercentage": 15
}
]
}
],
"tag": [
"#ShopLocal",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
],
"company": "Lakeshore Retail",
"city": "Port Cecile",
"lastUpdated": {
"$date": "2024-12-11T10:21:58.274Z"
}
}
Exemple 1 : Récupérer les deux catégories de ventes inférieures
Cette requête récupère les deux catégories de ventes inférieures par magasin avec le volume de ventes le plus bas. Exécutez une requête à l’aide de l’opérateur $minN sur le champ salesCategory imbriqué.
db.stores.aggregate([{
$project: {
bottomSalesCategories: {
$minN: {
input: "$sales.salesByCategory",
n: 2
}
}
}
},
{
$limit: 4
}
])
Cette requête retourne les résultats suivants :
[
{
"_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
"bottomSalesCategories": [
{
"categoryName": "Stockings",
"totalSales": 25731
}
]
},
{
"_id": "923d2228-6a28-4856-ac9d-77c39eaf1800",
"bottomSalesCategories": [
{
"categoryName": "Lamps",
"totalSales": 19880
},
{
"categoryName": "Rugs",
"totalSales": 20055
}
]
},
{
"_id": "7e53ca0f-6e24-4177-966c-fe62a11e9af5",
"bottomSalesCategories": [
{
"categoryName": "Markers",
"totalSales": 3927
}
]
},
{
"_id": "44fdb9b9-df83-4492-8f71-b6ef648aa312",
"bottomSalesCategories": [
{
"categoryName": "Storage Boxes",
"totalSales": 2236
}
]
}
]
Exemple 2 : utilisation de $minN avec $setWindowFields
Pour obtenir les deux listes inférieures de catégories de ventes par volume de ventes sur tous les magasins de l’entreprise « First Up Consultants », exécutez d’abord une requête pour partitionner les magasins par l’entreprise. Ensuite, utilisez l’opérateur $minN pour déterminer les deux catégories avec les ventes les plus basses au sein de chaque partition.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$setWindowFields: {
partitionBy: "$company",
sortBy: {
"sales.totalSales": -1
},
output: {
minTwoBySales: {
$minN: {
input: "$sales.totalSales",
n: 2
}
}
}
}
}, {
$project: {
company: 1,
name: 1,
minCategoriesBySales: 1
}
}])
Le premier résultat retourné par cette requête est :
[
{
"_id": "a0386810-b6f8-4b05-9d60-e536fb2b0026",
"name": "First Up Consultants | Electronics Stop - South Thelma",
"company": "First Up Consultants",
"minCategoriesBySales": [
[
{
"categoryName": "3D Printers",
"totalSales": 20882
},
{
"categoryName": "Phone Mounts",
"totalSales": 13624
},
{
"categoryName": "Prepaid Phones",
"totalSales": 7182
},
{
"categoryName": "MacBooks",
"totalSales": 10541
},
{
"categoryName": "Chargers",
"totalSales": 37542
},
{
"categoryName": "Student Laptops",
"totalSales": 43977
},
{
"categoryName": "Screen Protectors",
"totalSales": 14648
},
{
"categoryName": "Photo Printers",
"totalSales": 40064
},
{
"categoryName": "Printer Ink",
"totalSales": 30784
},
{
"categoryName": "Smartphone Cases",
"totalSales": 30468
},
{
"categoryName": "Printer Drums",
"totalSales": 34980
},
{
"categoryName": "Desktops",
"totalSales": 3890
}
],
[
{
"categoryName": "4K Camcorders",
"totalSales": 10466
},
{
"categoryName": "Tripods",
"totalSales": 30942
},
{
"categoryName": "Camcorder Accessories",
"totalSales": 25601
}
]
]
}
]
Exemple 3 - Utilisation d’un opérateur $minN comme expression de tableau pour obtenir les deux valeurs de ventes les plus basses
Cette requête extrait les deux valeurs de ventes les plus basses pour un document de magasin spécifique.
db.stores.aggregate([
{ $match: {_id: "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
lowestTwoSales: {
$minN: {
input: "$sales.salesByCategory.totalSales",
n: 2
}
}
}
}
])
Cette requête retourne le résultat suivant.
[
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"lowestTwoSales": [28946, 3000]
}
]