Partager via


$all

L’opérateur $all est utilisé pour sélectionner des documents où la valeur d’un champ est un tableau qui contient tous les éléments spécifiés. Cet opérateur est utile lorsque vous devez vous assurer qu’un champ de tableau contient plusieurs éléments spécifiés, quel que soit leur ordre dans le tableau.

Syntaxe

db.collection.find({
    field : {
        $all: [ < value1 > , < value2 > ]
    }
})

Paramètres

Paramètre Descriptif
field Champ à interroger.
<value1> , <value2> Valeurs qui doivent toutes être présentes dans le champ de tableau.

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 : Rechercher des documents contenant tous les éléments spécifiés dans un tableau

Cette requête récupère des documents contenant à la fois des éléments Laptops et Smartphones dans le salesByCategory.categoryName tableau.

db.stores.find({
    "sales.salesByCategory.categoryName": {
        $all: ["Laptops", "Smartphones"]
    }
}, {
    _id: 1,
    "sales.salesByCategory.categoryName": 1
}).limit(2)

Les deux premiers résultats retournés par cette requête sont les suivants :

[
    {
        "_id": "a57511bb-1ea3-4b26-bf0d-8bf928f2bfa8",
        "sales": {
            "salesByCategory": [
                {
                    "categoryName": "Smartphones"
                },
                {
                    "categoryName": "Laptops"
                }
            ]
        }
    },
    {
        "_id": "ca56d696-5208-40c3-aa04-d4e245df44dd",
        "sales": {
            "salesByCategory": [
                {
                    "categoryName": "Laptops"
                },
                {
                    "categoryName": "Smartphones"
                }
            ]
        }
    }
]