Partager via


$last

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')"
  }
]