L'opérateur de comparaison NOT IN dans MongoDB

Mehvish Ashiq 30 janvier 2023
  1. l’opérateur de comparaison $nin (NOT IN) dans MongoDB
  2. Utilisez l’opérateur $nin avec la méthode find() pour interroger un champ dans MongoDB
  3. Utilisez l’opérateur $nin avec la méthode find() pour interroger un document intégré dans MongoDB
  4. Utilisez l’opérateur $nin avec la méthode find() pour interroger un tableau dans MongoDB
  5. Utilisez l’opérateur $nin avec la méthode find() pour interroger un tableau de documents dans MongoDB
  6. Utilisez l’opérateur de comparaison $nin avec la méthode update() pour mettre à jour une valeur de champ dans MongoDB
  7. Utiliser l’opérateur $nin avec des expressions régulières dans MongoDB
L'opérateur de comparaison NOT IN dans MongoDB

Les opérateurs de comparaison sont très utiles lorsque vous travaillez avec de grands ensembles de données. Il est utile d’obtenir des informations à partir des données.

Ce didacticiel explique comment utiliser l’opérateur de comparaison $nin (NOT IN) dans MongoDB.

Il montre également comment utiliser les méthodes $nin avec find() et update() dans MongoDB. Plus loin, nous apprendrons également l’utilisation des expressions régulières avec l’opérateur $nin.

l’opérateur de comparaison $nin (NOT IN) dans MongoDB

Le $nin est l’un des opérateurs de comparaison de MongoDB. Cet opérateur sélectionne les documents où la valeur du champ n’appartient pas au tableau spécifié, ou le champ n’existe pas.

Dans le cas où le champ contient un tableau, un tableau de documents ou un tableau de documents intégrés, nous n’obtiendrons que les documents où le champ contient le tableau sans élément égal à la valeur dans le tableau donné (nous verrons ce scénario également plus tard dans ce tutoriel).

Avant d’entrer dans les détails, créons la collection d’échantillons contenant certains documents.

Exemple de code :

db.createCollection('students');
db.students.insertMany([
    {
        "name": {first: "Mehvish", last: "Ashiq"},
        "age": 30,
        "gender": "Female",
        "discipline": "BSCS",
        "joining_year": 2014,
        "department": "Computer Science",
        "courses":[ "Python","Java", "Machine Learning", "Data Science"],
        "contact":[
            { phone: { type: "cell", number: "923042516485" }},
            { mail: { type: "official", email: "mehvishofficial@gmail.com"}}
        ]
    },
    {
        "name": {first: "Aftab", last: "Raza"},
        "age": 25,
        "gender": "Male",
        "discipline": "BSIT",
        "joining_year": 2012,
        "department": "Information Technology",
        "courses":[ "Python","JavaScript", "Information Security"],
        "contact":[
            { phone: { type: "landline", number: "111-444-5555" }},
            { mail: { type: "personal", email: "aftab@hotmail.com"}}
        ]
    }
])

db.students.find().pretty()

Production:

{
        "_id" : ObjectId("6298ef54271c5124b739d7d3"),
        "name" : {
                "first" : "Mehvish",
                "last" : "Ashiq"
        },
        "age" : 30,
        "gender" : "Female",
        "discipline" : "BSCS",
        "joining_year" : 2014,
        "department" : "Computer Science",
        "courses" : [
                "Python",
                "Java",
                "Machine Learning",
                "Data Science"
        ],
        "contact" : [
                {
                        "phone" : {
                                "type" : "cell",
                                "number" : "923042516485"
                        }
                },
                {
                        "mail" : {
                                "type" : "official",
                                "email" : "mehvishofficial@gmail.com"
                        }
                }
        ]
}
{
        "_id" : ObjectId("6298ef54271c5124b739d7d4"),
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "age" : 25,
        "gender" : "Male",
        "discipline" : "BSIT",
        "joining_year" : 2012,
        "department" : "Information Technology",
        "courses" : [
                "Python",
                "JavaScript",
                "Information Security"
        ],
        "contact" : [
                {
                        "phone" : {
                                "type" : "landline",
                                "number" : "111-444-5555"
                        }
                },
                {
                        "mail" : {
                                "type" : "personal",
                                "email" : "aftab@hotmail.com"
                        }
                }
        ]
}

La seule raison d’avoir des documents un peu compliqués est d’apprendre à utiliser l’opérateur de comparaison $nin avec des champs différents. Par exemple, un seul champ, un champ avec le document incorporé, un champ contenant un tableau et un tableau de documents incorporés.

Utilisez l’opérateur $nin avec la méthode find() pour interroger un champ dans MongoDB

Exemple de code :

db.students.find({ "joining_year": { $nin: [2011,2014] }}).pretty();

Production:

{
        "_id" : ObjectId("6298ef54271c5124b739d7d4"),
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "age" : 25,
        "gender" : "Male",
        "discipline" : "BSIT",
        "joining_year" : 2012,
        "department" : "Information Technology",
        "courses" : [
                "Python",
                "JavaScript",
                "Information Security"
        ],
        "contact" : [
                {
                        "phone" : {
                                "type" : "landline",
                                "number" : "111-444-5555"
                        }
                },
                {
                        "mail" : {
                                "type" : "personal",
                                "email" : "aftab@hotmail.com"
                        }
                }
        ]
}

Dans cet exemple, nous utilisons l’opérateur $nin avec la méthode find() pour rechercher l’ensemble des documents où joining_year n’est ni 2011 ni 2014.

Nous pouvons utiliser la commande de la manière suivante si nous voulons n’avoir que certains champs au lieu du document entier. Écrivez 1 pour imprimer le champ et sa valeur sur l’écran de l’ordinateur, tandis que 0 signifie que nous ne voulons pas de ce champ dans le jeu de résultats.

Exemple de code :

db.students.find(
    { "joining_year": { $nin: [2011,2014] }},
    {"name": 1, "discipline": 1, "department": 1, "_id":0}
).pretty();

Production:

{
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "discipline" : "BSIT",
        "department" : "Information Technology"
}

Utilisez l’opérateur $nin avec la méthode find() pour interroger un document intégré dans MongoDB

Exemple de code :

db.students.find(
    { "name.last": { $nin: ["Raza", "Ali"] }},
    { "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();

Production:

{
        "name" : {
                "first" : "Mehvish",
                "last" : "Ashiq"
        },
        "age" : 30,
        "gender" : "Female"
}

Les exemples de documents ont un champ nommé name pour ce didacticiel, qui contient en outre le document intégré avec deux champs (first et last). Pour utiliser l’opérateur de comparaison $nin avec le champ name, nous utilisons la notation par points name.first.

Pour cet extrait de code, nous essayons de récupérer le name, age et le gender pour les documents où la valeur de name.last n’est pas le membre du tableau spécifié pour le $nin opérateur.

Nous obtenons les champs spécifiés à partir de ces documents où le name.last n’est ni Raza ni Ali. On peut aussi utiliser la condition AND avec l’opérateur $nin.

Exemple de code :

db.students.find(
    { "name.last": { $nin: ["Raza", "Ali"]}, "name.first": {$nin: ["Mehvish"]}},
    { "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();

Cette fois, nous n’obtiendrons aucune sortie car nous avons deux documents où le premier document a Mehvish comme valeur de name.first tandis que le second document contient le Raza comme valeur du champ name.last. Ainsi, les deux documents sont exclus du jeu de résultats et nous n’avons rien obtenu.

Utilisez l’opérateur $nin avec la méthode find() pour interroger un tableau dans MongoDB

Exemple de code :

db.students.find(
    { "courses": { $nin: ["JavaScript", "Networking", "Psychology"] }},
    { "courses": 1, "department": 1, "_id":0}
).pretty();

Production:

{
        "department" : "Computer Science",
        "courses" : [
                "Python",
                "Java",
                "Machine Learning",
                "Data Science"
        ]
}

Comprendre attentivement cette sortie. Dans cette sortie, le champ course contient un tableau sans élément égal à la valeur dans le tableau donné pour l’opérateur $nin.

L’ensemble du document où tout champ contenant un tableau avec des éléments égaux à JavaScript, Networking, ou Psychology sera exclu du jeu de résultats.

Utilisez l’opérateur $nin avec la méthode find() pour interroger un tableau de documents dans MongoDB

Observez attentivement le champ contact que nous avons utilisé lors du remplissage de la collection students au début de ce didacticiel. Il contient un tableau de documents où chaque document a un document incorporé (imbriqué).

Comment interroger cela en utilisant l’opérateur $nin ? Voir l’exemple ci-dessous.

db.students.find(
    { "contact.phone.type": { $nin: ["cell"] }},
    { "contact": 1, "department": 1, "_id":0}
).pretty();

Production:

{
        "department" : "Information Technology",
        "contact" : [
                {
                        "phone" : {
                                "type" : "landline",
                                "number" : "111-444-5555"
                        }
                },
                {
                        "mail" : {
                                "type" : "personal",
                                "email" : "aftab@hotmail.com"
                        }
                }
        ]
}

Utilisez l’opérateur de comparaison $nin avec la méthode update() pour mettre à jour une valeur de champ dans MongoDB

Exemple de code :

db.students.update(
    { "joining_year": {$nin: [2011,2014]}},
    { $set: {"joining_year": 2000}}
);

Dans cet extrait de code, nous récupérons les documents où le joining_year n’est ni 2014 ni 2011 puis définissons la valeur de joining_year sur 2000. Ensuite, utilisez la commande suivante pour voir le document mis à jour.

db.students.find().pretty()

Utiliser l’opérateur $nin avec des expressions régulières dans MongoDB

Exemple de code :

var array_of_regex = [/Data+/];
db.students.find(
    { "courses": {$nin: array_of_regex}},
    {"name":1, "courses":1, "department":1, "_id":0}
).pretty();

Production:

{
        "name" : {
                "first" : "Aftab",
                "last" : "Raza"
        },
        "department" : "Information Technology",
        "courses" : [
                "Python",
                "JavaScript",
                "Information Security"
        ]
}

Pour cet exemple, nous créons un tableau pouvant contenir différentes expressions régulières. Pour l’instant, nous n’avons qu’une seule expression régulière.

Pourquoi devons-nous créer un tableau d’expressions régulières ? C’est parce que le $nin prend un tableau avec lequel comparer.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Article connexe - MongoDB Operator