Der NOT IN-Vergleichsoperator in MongoDB

Mehvish Ashiq 30 Januar 2023
  1. der Vergleichsoperator $nin (NOT IN) in MongoDB
  2. Verwenden Sie den $nin-Operator mit der find()-Methode, um ein Feld in MongoDB abzufragen
  3. Verwenden Sie den $nin-Operator mit der find()-Methode, um ein eingebettetes Dokument in MongoDB abzufragen
  4. Verwenden Sie den Operator $nin mit der Methode find(), um ein Array in MongoDB abzufragen
  5. Verwenden Sie den $nin-Operator mit der find()-Methode, um ein Array von Dokumenten in MongoDB abzufragen
  6. Verwenden Sie den Vergleichsoperator $nin mit der Methode update(), um einen Feldwert in MongoDB zu aktualisieren
  7. Verwendung von den Operator $nin mit regulären Ausdrücken in MongoDB
Der NOT IN-Vergleichsoperator in MongoDB

Vergleichsoperatoren sind sehr nützlich bei der Arbeit mit großen Datensätzen. Es ist hilfreich, Erkenntnisse aus den Daten zu gewinnen.

Dieses Tutorial erläutert die Verwendung des Vergleichsoperators $nin (NOT IN) in MongoDB.

Es zeigt auch, wie man die Methoden $nin mit den Methoden find() und update() in MongoDB verwendet. Außerdem lernen wir die Verwendung von regulären Ausdrücken mit dem Operator $nin kennen.

der Vergleichsoperator $nin (NOT IN) in MongoDB

Das $nin ist einer der Vergleichsoperatoren in MongoDB. Dieser Operator wählt die Dokumente aus, bei denen der Feldwert nicht zum angegebenen Array gehört oder das Feld nicht existiert.

Falls das Feld ein Array, ein Array von Dokumenten oder ein Array von eingebetteten Dokumenten enthält, erhalten wir nur die Dokumente, bei denen das Feld das Array enthält, ohne dass ein Element gleich dem Wert im angegebenen Array ist (wir werden dieses Szenario ebenfalls später sehen). in diesem Tutorial).

Bevor wir uns mit weiteren Details befassen, erstellen wir die Beispielsammlung mit einigen Dokumenten.

Beispielcode:

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()

Ausgabe:

{
        "_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"
                        }
                }
        ]
}

Der einzige Grund, etwas komplizierte Dokumente zu haben, besteht darin, die Verwendung des Vergleichsoperators $nin mit verschiedenen Feldern zu lernen. Zum Beispiel ein einzelnes Feld, ein Feld mit dem eingebetteten Dokument, ein Feld, das ein Array enthält, und ein Array von eingebetteten Dokumenten.

Verwenden Sie den $nin-Operator mit der find()-Methode, um ein Feld in MongoDB abzufragen

Beispielcode:

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

Ausgabe:

{
        "_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"
                        }
                }
        ]
}

In diesem Beispiel verwenden wir den Operator $nin mit der Methode find(), um nach allen Dokumenten zu suchen, bei denen joining_year weder 2011 noch 2014 ist.

Wir können den Befehl auf folgende Weise verwenden, wenn wir nur bestimmte Felder anstelle des gesamten Dokuments haben möchten. Schreiben Sie 1, um das Feld und seinen Wert auf dem Computerbildschirm zu drucken, während 0 bedeutet, dass wir dieses Feld nicht in der Ergebnismenge haben wollen.

Beispielcode:

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

Ausgabe:

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

Verwenden Sie den $nin-Operator mit der find()-Methode, um ein eingebettetes Dokument in MongoDB abzufragen

Beispielcode:

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

Ausgabe:

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

Die Beispieldokumente haben für dieses Tutorial ein Feld mit dem Namen name, das außerdem das eingebettete Dokument mit zwei Feldern (first und last) enthält. Um den Vergleichsoperator $nin mit dem Feld name zu verwenden, verwenden wir die Punktnotation name.first.

Für dieses Code-Snippet versuchen wir, name, Alter und Geschlecht für die Dokumente abzurufen, bei denen der Wert von name.last nicht das Mitglied des angegebenen Arrays für $nin ist. Operator.

Wir erhalten die angegebenen Felder aus den Dokumenten, in denen name.last weder Raza noch Ali ist. Wir können auch die Bedingung AND mit dem Operator $nin verwenden.

Beispielcode:

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

Dieses Mal erhalten wir keine Ausgabe, da wir zwei Dokumente haben, bei denen das erste Dokument Mehvish als Wert von name.first enthält, während das zweite Dokument Raza als Wert des Felds name.last enthält . Beide Dokumente werden also aus der Ergebnismenge ausgeschlossen, und wir haben nichts.

Verwenden Sie den Operator $nin mit der Methode find(), um ein Array in MongoDB abzufragen

Beispielcode:

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

Ausgabe:

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

Verstehen Sie diese Ausgabe sorgfältig. In dieser Ausgabe enthält das Feld Kurs ein Array ohne Element, das dem Wert im angegebenen Array für den Operator $nin entspricht.

Das gesamte Dokument, in dem ein Feld ein Array mit Elementen enthält, die gleich JavaScript, Networking oder Psychology sind, wird aus der Ergebnismenge ausgeschlossen.

Verwenden Sie den $nin-Operator mit der find()-Methode, um ein Array von Dokumenten in MongoDB abzufragen

Achten Sie genau auf das Feld contact, das wir beim Füllen der Sammlung students zu Beginn dieses Tutorials verwendet haben. Es enthält eine Reihe von Dokumenten, wobei jedes Dokument ein eingebettetes (verschachteltes) Dokument hat.

Wie kann man das mit dem Operator $nin abfragen? Siehe das unten angegebene Beispiel.

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

Ausgabe:

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

Verwenden Sie den Vergleichsoperator $nin mit der Methode update(), um einen Feldwert in MongoDB zu aktualisieren

Beispielcode:

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

In diesem Code-Snippet rufen wir die Dokumente ab, bei denen joining_year weder 2014 noch 2011 ist, und setzen dann den Wert von joining_year auf 2000. Verwenden Sie als Nächstes den folgenden Befehl, um das aktualisierte Dokument anzuzeigen.

db.students.find().pretty()

Verwendung von den Operator $nin mit regulären Ausdrücken in MongoDB

Beispielcode:

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

Ausgabe:

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

Für dieses Beispiel erstellen wir ein Array, das verschiedene reguläre Ausdrücke enthalten kann. Im Moment haben wir nur einen regulären Ausdruck.

Warum müssen wir ein Array von Regexes erstellen? Das liegt daran, dass $nin ein Array zum Vergleichen benötigt.

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

Verwandter Artikel - MongoDB Operator