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 $first trie les documents sur un ou plusieurs champs spécifiés par la requête et retourne le premier document correspondant aux critères de filtrage. Si aucun ordre de tri n’est spécifié, l’ordre n’est pas défini.
Syntaxe
{
$first: <expression>
}
Paramètres
| Paramètre | Descriptif |
|---|---|
expression |
Expression à évaluer et retourner le premier document du jeu de résultats |
Examples
Considérez cet exemple de document de la collection des 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 : Obtenir le document le moins récemment mis à jour
Pour récupérer le magasin le moins récemment mis à jour sous la société First Up Consultants, exécutez une requête pour extraire tous les documents appartenant à la société « First Up Consultants », triez les documents résultants dans l’ordre croissant du champ LastUpdated et retournez le premier document dans le jeu de résultats.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$sort: {
lastUpdated: 1
}
}, {
$group: {
_id: "$company",
firstUpdated: {
$first: "$lastUpdated"
}
}
}])
Cette requête retourne le résultat suivant :
[
{
"_id": "First Up Consultants",
"firstUpdated": "ISODate('2025-06-11T10:48:01.291Z')"
}
]
Exemple 2 : Obtenir la première catégorie par montant des ventes par magasin
Pour récupérer la première catégorie (par ordre alphabétique) dans chaque magasin, exécutez une requête pour trier la liste des catégories de ventes dans chaque magasin et renvoyer la première catégorie du jeu de résultats trié par magasin.
db.stores.aggregate([{
$unwind: "$sales.salesByCategory"
},
{
$sort: {
"_id": 1,
"sales.salesByCategory.categoryName": 1
}
},
{
$group: {
_id: "$_id",
storeName: {
$first: "$name"
},
totalSales: {
$first: "$sales.totalSales"
},
firstCategory: {
$first: {
categoryName: "$sales.salesByCategory.categoryName",
categoryTotalSales: "$sales.salesByCategory.totalSales"
}
}
}
}
])
Les deux premiers résultats retournés par cette requête sont les suivants :
[
{
"_id": "64ec6589-068a-44a6-be5b-9d37bb0a90f1",
"storeName": "First Up Consultants | Computer Gallery - West Cathrine",
"totalSales": 186829,
"firstCategory": {
"categoryName": "Cases",
"categoryTotalSales": 36386
}
},
{
"_id": "14343900-2a5c-44bf-a52b-9efe63579866",
"storeName": "Northwind Traders | Home Improvement Closet - West Evanside",
"totalSales": 35371,
"firstCategory": {
"categoryName": "Doors",
"categoryTotalSales": 21108
}
}
]
Exemple 3 : Obtenir le premier événement promotionnel par magasin
Pour récupérer le premier événement de promotion pour chaque magasin, exécutez une requête pour trier la liste des événements de promotion au sein de chaque magasin par startDate et renvoyer le premier événement à partir du jeu de résultats trié par magasin.
Obtenez le premier événement promotionnel pour chaque magasin en fonction de la date de début.
db.stores.aggregate([{
$unwind: "$promotionEvents"
},
{
$sort: {
"_id": 1,
"promotionEvents.promotionalDates.startDate.Year": 1,
"promotionEvents.promotionalDates.startDate.Month": 1,
"promotionEvents.promotionalDates.startDate.Day": 1
}
},
{
$group: {
_id: "$_id",
storeName: {
$first: "$name"
},
firstPromotionEvent: {
$first: {
eventName: "$promotionEvents.eventName",
startYear: "$promotionEvents.promotionalDates.startDate.Year",
startMonth: "$promotionEvents.promotionalDates.startDate.Month"
}
}
}
}
])
Les deux premiers résultats retournés par cette requête sont les suivants :
[
{
"_id": "64ec6589-068a-44a6-be5b-9d37bb0a90f1",
"storeName": "First Up Consultants | Computer Gallery - West Cathrine",
"firstPromotionEvent": {
"eventName": "Crazy Markdown Madness",
"startYear": 2024,
"startMonth": 6
}
},
{
"_id": "a58d0356-493b-44e6-afab-260aa3296930",
"storeName": "Fabrikam, Inc. | Outdoor Furniture Nook - West Lexie",
"firstPromotionEvent": {
"eventName": "Price Drop Palooza",
"startYear": 2023,
"startMonth": 9
}
}
]