Partager via


$eq

L’opérateur $eq est utilisé pour faire correspondre les documents où la valeur d’un champ est égale à une valeur spécifiée. L’opérateur $eq filtre les documents en fonction des correspondances exactes sur les prédicats de requête pour récupérer des documents avec des valeurs, des objets et des tableaux spécifiques.

Syntaxe

{
    field: {
        $eq: <value>
    }
}

Paramètres

Paramètre Descriptif
field Champ à comparer
value Valeur de référence pour la comparaison

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 : Utiliser $eq filtre sur un champ de niveau racine

Pour trouver un magasin portant le nom « Boulder Innovations | Home Security Place - Ankundingburgh », exécutez une requête avec le prédicat $eq pour correspondre au champ de nom et projetez uniquement les champs ID et nom dans le résultat.

db.stores.find({
    name: {
        $eq: "Boulder Innovations | Home Security Place - Ankundingburgh"
    }
}, {
    name: 1
})

Cette requête retourne le résultat suivant :

[
    {
        "_id": "bda56164-954d-4f47-a230-ecf64b317b43",
        "name": "Boulder Innovations | Home Security Place - Ankundingburgh"
    }
]

Exemple 2 : Utiliser $eq filtre sur un champ imbriqué

Pour rechercher un magasin avec un total de ventes de 37 015 $, exécutez une requête à l’aide de l’opérateur $eq en utilisant la notation par points sur le champ sales.totalSales imbriqué.

db.stores.find({
    "sales.totalSales": {
        $eq: 37015
    }
}, {
    name: 1,
    "sales.totalSales": 1
})

Cela retourne le résultat suivant :

[
    {
        "_id": "bda56164-954d-4f47-a230-ecf64b317b43",
        "name": "Boulder Innovations | Home Security Place - Ankundingburgh",
        "sales": { "totalSales": 37015 }
    }
]

Exemple 3 : Utiliser $eq pour des éléments individuels dans un tableau

La requête suivante récupère des documents à l’aide de prédicats d’égalité sur des éléments individuels dans le tableau promotionEvents.discounts imbriqué.

Cette requête recherche une correspondance d’égalité sur l’un des objets au sein du tableau de remises imbriqué

db.stores.find({
    "promotionEvents.discounts": {
        $eq: {
            categoryName: "Alarm Systems",
            discountPercentage: 5
        }
    }
}, {
    name: 1
}, {
    limit: 2
})

Cette requête retourne les résultats suivants :

[
  {
    "_id": "ece5bf6c-3255-477e-bf2c-d577c82d6995",
    "name": "Proseware, Inc. | Home Security Boutique - Schambergertown"
  },
  {
    "_id": "7baa8fd8-113a-4b10-a7b9-2c116e976491",
    "name": "Tailwind Traders | Home Security Pantry - Port Casper"
  }
]

Exemple 4 : Utiliser $eq pour correspondre à l’ensemble du tableau

Cette requête recherche des documents en fonction de la correspondance exacte sur TOUTES les valeurs du tableau promotionEvents.discounts.

db.stores.find({
    "promotionEvents.discounts": {
        $eq: [{
            categoryName: "Alarm Systems",
            discountPercentage: 5
        }, {
            categoryName: "Door Locks",
            discountPercentage: 12
        }]
    }
}, {
    name: 1
})

Cette requête retourne le résultat suivant :

[
    {
        "_id": "aa9ad64c-29da-42f8-a1f0-30e03bf04a2d",
        "name": "Boulder Innovations | Home Security Market - East Sheridanborough"
    }
]

Note

Pour une correspondance d’égalité sur un tableau entier, l’ordre des valeurs spécifiées dans les prédicats d’égalité doit également être une correspondance exacte.