MongoDB Element aus einem Array entfernen

Mehvish Ashiq 30 Januar 2023
  1. MongoDB Element aus einem Array entfernen
  2. Verwenden Sie MongoDB $pull, um ein Element aus einem Array von Dokumenten zu entfernen
  3. Verwenden Sie MongoDB $pullAll, um ein Element aus einem Array zu entfernen
  4. Verwenden Sie MongoDB $pop, um ein Element aus einem Array zu entfernen
  5. Verwenden Sie MongoDB $unset, um ein Feld zu entfernen, das das angegebene Element enthält
  6. Verwenden Sie den Positionsoperator von MongoDB, um das Element auf null zu setzen, anstatt es zu entfernen
MongoDB Element aus einem Array entfernen

Je nach Projektanforderung können wir unterschiedliche Herangehensweisen verfolgen. Heute lernen wir, wie man $pull, $pullAll, $pop, $unset und den Positionsoperator ($) verwendet, um während der Arbeit ein Element aus einem Array oder Array von Dokumenten zu entfernen in MongoDB.

MongoDB Element aus einem Array entfernen

Wir müssen eine Sammlung von Musterdokumenten haben, um alle erwähnten Wege zu üben. Wir erstellen eine Sammlung mit dem Namen collection und fügen nur ein Dokument ein.

Sie können auch die folgende collection mit einem Dokument verwenden.

Beispielcode:

// MongoDB version 5.0.8

> db.collection.insertMany([
    {
        contact: {
            phone: [
                {"type" : "UAN", "number" : "123456789"},
                {"type" : "office", "number" : "987546321"},
                {"type" : "personal", "number" : "852147963"}
            ]
        },
        services: ["Google", "Instagram", "Twitter", "Facebook"],
        scores: [ 0, 1, 8, 17, 18, 8, 20, 10 ]
    },
    {
        contact: {
            phone: [
                {"type" : "UAN", "number" : "456321879"},
                {"type" : "office", "number" : "874596321"},
                {"type" : "personal", "number" : "964785123"}
            ]
        },
        services: ["Google", "Instagram", "Twitter"],
        scores: [ 1, 8, 2, 3, 8, 7, 1 ]

    }
]);

Wenn Sie die Sammlung mit dem Namen collection nicht haben, machen Sie sich keine Sorgen; Die obige Abfrage erstellt das für Sie und füllt es aus. Als nächstes können Sie db.collection.find().pretty() ausführen, um sich das eingefügte Dokument anzusehen.

Denken Sie daran, dass Sie die aktualisierten Dokumente nach dem Ausführen der kommenden Codebeispiele nicht sehen werden. Dazu müssen Sie den Befehl db.collection.find().pretty() ausführen.

Verwenden Sie MongoDB $pull, um ein Element aus einem Array von Dokumenten zu entfernen

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update(
    { _id : ObjectId("62aae796f27219958a489b89") },
    { $pull : { "contact.phone": { "number": "987546321" } } }
);

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "UAN", "number" : "123456789" },
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
     "scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "UAN", "number" : "456321879" },
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Google", "Instagram", "Twitter" ],
     "scores" : [ 1, 8, 2, 3, 8, 7, 1 ]
}

Hier verwenden wir den Operator $pull, um alle Instanzen eines Werts/Werte aus einem bestehenden Array zu entfernen, das der Filterabfrage oder der angegebenen Bedingung entspricht.

Im obigen Codebeispiel suchen wir nach einem Dokument, bei dem die _id gleich ObjectId("62aae796f27219958a489b89") ist. Sobald das Dokument die angegebene Bedingung erfüllt, entfernen wir die Instanz aus einem bestehenden Array, in dem contact.phone.number gleich 987546321 ist.

Denken Sie bei der Verwendung des Operators $pull an die folgenden Punkte.

  • Wenn der angegebene Wert, der entfernt werden muss, ein Array ist, dann entfernt der $pull-Operator nur Elemente aus einem Array, die den angegebenen Wert genau erfüllen (einschließlich Reihenfolge).
  • Wenn der angegebene Wert, der entfernt werden muss, ein Dokument ist, entfernt der $pull-Operator nur Elemente aus einem Array, das die genauen Felder und Werte enthält. Die Reihenfolge der Felder kann hier abweichen.
  • Wenn die angegebene Bedingung und die Elemente des Arrays eingebettete Dokumente sind, wendet der $pull-Operator die Bedingung an, als ob jedes Array-Element ein Dokument in einer Sammlung wäre. Weitere Einzelheiten dazu finden Sie hier.

Jetzt haben wir eine andere Situation, in der wir die Operation Entfernen für alle Dokumente in einer Sammlung durchführen möchten. Dazu verwenden wir die folgende Syntax mit $pull, während {multi: true} auf alle Dokumente der angegebenen Bedingung wirkt.

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update({},
  { $pull: { "contact.phone": { "type": "UAN" } } },
  { multi: true }
);

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
     "scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Google", "Instagram", "Twitter" ],
     "scores" : [ 1, 8, 2, 3, 8, 7, 1 ]
}

Um die obige Ausgabe zu erhalten, entfernen wir das Array-Element aus allen Dokumenten in einer Sammlung, in der contact.phone.type gleich "UAN" ist.

Unsere nächste Aufgabe besteht darin, Elemente aus dem Array Scores zu entfernen, deren Werte größer oder gleich 2 und kleiner oder gleich 6 sind ( 2 <= value <= 6 ). Führen Sie die folgende Abfrage aus, um dies für alle Dokumente der ausgewählten Sammlung zu tun.

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update(
    {},
    { $pull : { scores : {$gte: 2, $lte: 6} } },
    { multi: true }
)

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Google", "Instagram", "Twitter", "Facebook" ],
     "scores" : [ 0, 1, 8, 17, 18, 8, 20, 10 ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Google", "Instagram", "Twitter" ],
     "scores" : [ 1, 8, 8, 7, 1 ]
}

Um mit Werten vom Typ Zeichenfolge zu üben, können wir dies folgendermaßen tun.

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update(
    {},
    { $pull: { "services": { $in: [ "Google", "Instagram" ] }, "scores": 1 } },
    { multi: true }
)

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Twitter", "Facebook" ],
     "scores" : [ 0, 8, 17, 18, 8, 20, 10 ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Twitter" ],
     "scores" : [ 8, 8, 7 ]
}

Für dieses Codebeispiel verwenden wir den Vergleichsoperator $in, um ein Array von Werten zu erhalten und sie aus dem Array services zu entfernen, falls einer davon vorhanden ist.

Außerdem entfernen wir 1 aus dem scores-Array, wenn es dort vorhanden ist, während wir den $pull-Operator verwenden, um all diese Entfernungsoperationen durchzuführen.

Verwenden Sie MongoDB $pullAll, um ein Element aus einem Array zu entfernen

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update(
    { _id: ObjectId("62aae796f27219958a489b8a") },
    { $pullAll: { "scores": [8] } }
)

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Twitter", "Facebook" ],
     "scores" : [ 0, 8, 17, 18, 8, 20, 10 ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Twitter" ],
     "scores" : [ 7 ]
}

Für diesen Code verwenden wir den Operator $pullAll, um alle Vorkommen (Instanzen) des angegebenen Werts aus einem bereits vorhandenen Array zu entfernen. Wenn beispielsweise die Zahl 8 zweimal im Array Ergebnisse vorkommt, werden beide 8-Werte entfernt.

Wie der Operator $pull, der die Array-Elemente entfernt, indem er die Filterabfrage angibt, löscht/entfernt der $pullAll die Array-Elemente, die mit den aufgelisteten Werten übereinstimmen.

Wir verwenden die Punktnotation, um eingebettete Dokumente des Arrays zu behandeln.

Verwenden Sie MongoDB $pop, um ein Element aus einem Array zu entfernen

Wir können den Operator $pop verwenden, wenn wir daran interessiert sind, das erste oder letzte Element aus einem Array zu entfernen. Dazu übergeben wir die -1 oder 1 an den $pop-Operator, um ein Array-Element von first oder last zu entfernen.

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update(
  { _id: ObjectId("62aae796f27219958a489b89") },
  { $pop: { "scores": -1 } }
)

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Twitter", "Facebook" ],
     "scores" : [ 8, 17, 18, 8, 20, 10 ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Twitter" ],
     "scores" : [ 7 ]
}

Verwenden Sie MongoDB $unset, um ein Feld zu entfernen, das das angegebene Element enthält

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update(
    { _id : ObjectId("62aae796f27219958a489b89") },
    { $unset : {"scores" : 8 }}
)

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Twitter", "Facebook" ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Twitter" ],
     "scores" : [ 7 ]
}

Hier verwenden wir den Operator $unset, um ein bestimmtes Feld zu entfernen, das den angegebenen Wert enthält. Beispielsweise entfernen wir das Feld scores, das der Filterabfrage entspricht und 8 als Array-Element enthält.

Denken Sie daran, dass bei Verwendung des Operators $unset mit einem Positionsoperator ($) das übereinstimmende Element nicht entfernt, sondern auf null gesetzt wird. Sehen Sie sich den folgenden Abschnitt an, um dies zu üben.

Verwenden Sie den Positionsoperator von MongoDB, um das Element auf null zu setzen, anstatt es zu entfernen

Beispielcode:

// MongoDB version 5.0.8

> db.collection.update(
    {"services": "Facebook"},
    { $unset: {"services.$" : 1}}
)

AUSGANG:

{
    "_id" : ObjectId("62aae796f27219958a489b89"),
    "contact" : {
        "phone" : [
            { "type" : "personal", "number" : "852147963" }
         ]
     },
     "services" : [ "Twitter", null ]
}
{
    "_id" : ObjectId("62aae796f27219958a489b8a"),
    "contact" : {
        "phone" : [
            { "type" : "office", "number" : "874596321" },
            { "type" : "personal", "number" : "964785123" }
        ]
     },
     "services" : [ "Twitter" ],
     "scores" : [ 7 ]
}

Dieses Code-Snippet verwendet $unset mit dem Positionsoperator, um das Element des Arrays auf null zu setzen, anstatt es zu entfernen. Wir verwenden $, um das erste Element des Arrays zu aktualisieren, wobei der Wert Facebook im Array services ist.

Dieser Ansatz kann verwendet werden, wenn wir die Position eines Elements des Arrays nicht kennen. Andererseits können wir auch das $[] (alles Positionsoperatoren) verwenden, wenn wir alle Elemente im angegebenen Array-Feld aktualisieren möchten.

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 Array

Verwandter Artikel - MongoDB Document