Partager via


find

La find commande dans Azure DocumentDB est utilisée pour interroger des documents au sein d’une collection. Cette commande est fondamentale pour les opérations de récupération de données et peut être personnalisée avec des filtres, des projections et des options de requête pour affiner les résultats.

Syntaxe

La syntaxe de base de la find commande est la suivante :

db.collection.find(query, projection, options)

Paramètres

Paramètre Descriptif
query Document qui spécifie les critères pour les documents à récupérer
projection (Facultatif) Document qui spécifie les champs des documents correspondants à retourner dans le jeu de résultats
options (Facultatif) Document qui spécifie des options pour le comportement et les résultats de la requête

Exemple(s)

Considérez cet exemple de document à partir de la collection de magasins dans la base de données StoreData.

{
    "_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 : Récupérer tous les documents

La commande find() sans filtres de requête retourne tous les documents de la collection.

db.stores.find()

Exemple 2 : Récupérer des documents avec des filtres de requête

Récupérez des documents à l’aide d’un filtre sur la propriété name.

db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"})

Exemple 3 : Récupérer des documents avec des filtres de requête sur des objets

Récupérez des documents à l’aide de filtres de requête sur les champs lat et lon dans l’objet d’emplacement.

db.stores.find({"location.lat": 13.5236, "location.lon": -82.5707})

Lorsque la notation point (.) n’est pas utilisée pour référencer des champs dans un objet, le filtre de requête doit correspondre exactement à l’objet entier, y compris l’ordre des champs.

db.stores.find({"location": {"lat": 13.5236, "lon": -82.5707}})

Exemple 4 : Récupérer des documents avec des filtres de requête sur des tableaux

Récupérez des documents à partir du tableau promotionEvents où eventName est « Grand Bargain Gala ».

db.stores.find({"promotionEvents.eventName": "Grand Bargain Gala"})

Récupérez des documents à partir du tableau « discounts », qui est imbriqué dans le tableau promotionEvents où le categoryName est « Area Rugs ».

db.stores.find({"promotionEvents.discounts.categoryName": "Area Rugs"})

Prévisions

Le deuxième document de la commande find spécifie la liste des champs à projeter dans la réponse.

Inclure un champ spécifique ou plusieurs champs dans la réponse

Une valeur entière non nulle ou une valeur booléenne de true inclut le champ dans la réponse.

db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": 1, "sales": 1})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": true, "sales": true})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": 1, "sales": true})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"location": 1, "sales": -5})

Les quatre requêtes sont équivalentes et spécifient l’inclusion des champs « location » et « sales » dans la réponse du serveur.

{
    "_id": "b5c9f932-4efa-49fd-86ba-b35624d80d95",
    "location": {
        "lat": 13.5236,
        "lon": -82.5707
    },
    "sales": {
        "totalSales": 35346,
        "salesByCategory": [
            {
                "categoryName": "Rulers",
                "totalSales": 35346
            }
        ]
    }
}

Exclure un champ spécifique ou plusieurs champs dans la réponse

Une valeur entière de zéro ou une valeur booléenne de false exclut le champ spécifié de la réponse de requête.

db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"promotionEvents": 0, "location": 0, "sales": 0})
db.stores.find({"name": "Fourth Coffee | Stationery Haven - New Franco"}, {"promotionEvents": false, "location": false, "sales": false})

Les deux requêtes sont équivalentes et retournent la réponse suivante :

{
    "_id": "b5c9f932-4efa-49fd-86ba-b35624d80d95",
    "name": "Fourth Coffee | Stationery Haven - New Franco",
    "staff": {
        "totalStaff": {
            "fullTime": 17,
            "partTime": 5
        }
    }
}

Note

Par défaut, le champ _id est inclus dans la réponse du serveur. Le document de projection ne peut pas contenir à la fois des clauses d’inclusion et d’exclusion. Toutefois, le champ _id est la seule exception à cette règle et peut être exclu avec une liste de champs à inclure et inversement.

Projeter le premier élément d’un tableau qui correspond aux critères de filtre de requête

La commande « arrayFieldName ».$ projette uniquement la première occurrence d’un objet dans un tableau qui correspond aux filtres de requête spécifiés.

db.stores.find({"promotionEvents.eventName": "Grand Bargain Gala"}, {"promotionEvents.$": true})

L’un des documents retournés affiche uniquement le premier élément du tableau promotionEvents qui porte le nom de l’événement « Grand Bargain Gala » tout en excluant tous les autres éléments du tableau.

{
    "_id": "d7fe6fb9-57e8-471a-b8d2-714e3579a415",
    "promotionEvents": [
        {
            "eventName": "Grand Bargain Gala",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 3,
                    "Day": 25
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 4,
                    "Day": 1
                }
            },
            "discounts": [
                {
                    "categoryName": "Area Rugs",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Vinyl Flooring",
                    "discountPercentage": 12
                }
            ]
        }
    ]
}

Éléments spécifiques du projet dans un tableau qui correspondent aux critères de filtre de requête

Cette requête projette la propriété eventName et la propriété Year imbriquée dans le tableau promotionEvents.

db.stores.find({"promotionEvents.eventName": "Grand Bargain Gala"}, {"promotionEvents.eventName": true, "promotionEvents.promotionalDates.startDate.Year": true})

L’un des documents retournés affiche les éléments de tableau spécifiés projetés dans la réponse.

{
    "_id": "d7fe6fb9-57e8-471a-b8d2-714e3579a415",
    "promotionEvents": [
        {
            "eventName": "Grand Bargain Gala",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024
                }
            }
        },
        {
            "eventName": "Grand Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024
                }
            }
        },
        {
            "eventName": "Epic Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024
                }
            }
        }
    ]
}