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 $last trie les documents sur un ou plusieurs champs spécifiés par la requête et retourne le dernier document correspondant aux critères de filtrage.
Syntaxe
{
"$last": <expression>
}
Paramètres
| Paramètre | Descriptif |
|---|---|
expression |
Expression à évaluer pour retourner le dernier document de l'ensemble 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 dernier magasin mis à jour au sein d’une entreprise
Pour récupérer le magasin plus récemment mis à jour dans la société First Up Consultants, exécutez une requête pour extraire tous les magasins dans First Up Consultants, triez les documents dans l’ordre croissant du champ LastUpdated et retournez le dernier document à partir des résultats triés.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$sort: {
lastUpdated: 1
}
}, {
$group: {
_id: "$company",
lastUpdated: {
$last: "$lastUpdated"
}
}
}])
Cette requête retourne le résultat suivant :
[
{
"_id": "First Up Consultants",
"lastUpdated": "ISODate('2024-12-31T13:01:19.097Z')"
}
]
Exemple 2 : utilisation de l’opérateur de fenêtre
Pour récupérer le magasin plus récemment mis à jour au sein de chaque entreprise, exécutez une requête pour partitionner les résultats par le champ d’entreprise et trier les documents dans chaque partition dans l’ordre croissant du champ LastUpdated et renvoyer les résultats triés par partition.
db.stores.aggregate([{
$setWindowFields: {
partitionBy: "$company",
sortBy: {
lastUpdated: 1
},
output: {
lastUpdatedDateForStore: {
$last: "$lastUpdated",
window: {
documents: ["current", "unbounded"]
}
}
}
}
}])
Le premier résultat retourné par cette requête est :
[
{
"_id": "First Up Consultants",
"lastUpdated": "ISODate('2024-12-31T13:01:19.097Z')"
}
]