Verwenden Sie MongoDB $Pull, um Dokumente in einem Array zu löschen

Shihab Sikder 18 August 2022
  1. MongoDB-Operator $pull
  2. MongoDB-Befehl $pull mit Bedingung
  3. Verwenden Sie $pull im Nested Array
Verwenden Sie MongoDB $Pull, um Dokumente in einem Array zu löschen

Der Operator $pull kann jedes vorhandene Element aus dem Array abrufen. Sie können ein oder mehrere Elemente aus dem Array ziehen.

Sie können beliebige bestimmte Objekte aus dem verschachtelten Array löschen.

MongoDB-Operator $pull

$pull wird in MongoDB verwendet, um vorhandene Elemente aus dem Array zu entfernen. Das $pull wird mit der update-Abfrage verwendet.

Hier ist ein Beispiel. Folgendes haben wir eingefügt.

db.cart.insertMany( [
   {
      _id: 1,
      grocery:["biscuits", "oil", "honey", "milk", "paper"],
      electronics:["earphone", "bluetooth", "mouse", "keyboard"]
   },
   {
      _id: 2,
      grocery:["biscuits", "oil", "soda", "water", "paper"],
      electronics:["pendrive", "motherboard", "mouse", "SSD"]
   }
] )

Hier sind zwei Einkaufswagen. Nehmen wir an, der Laden hat keinen Bestand für Papier, SSD oder Maus.

Sie möchten diese Produkte also aus dem Warenkorb entfernen. Dann können Sie die folgende Abfrage mit dem Operator $pull verwenden.

db.cart.updateMany({},
    {
        $pull:{ grocery: "paper",  electronics:{ $in:[ "SSD","mouse" ] } }
    }
)

Der Operator $in nimmt ein Array, um jedes Element mit dem Dokument abzugleichen. Nach diesem Vorgang sieht die Sammlung wie folgt aus.

{
      _id: 1,
      grocery:["biscuits", "oil", "honey", "milk"],
      electronics:["earphone", "bluetooth", "keyboard"]
   },
   {
      _id: 2,
      grocery:["biscuits", "oil", "soda", "water"],
      electronics:["pendrive", "motherboard"]
   }

MongoDB-Befehl $pull mit Bedingung

Nehmen wir an, wir haben das folgende Dokument.

{
    _id: 1,
    price: [ 31, 50, 55, 66, 98, 25 ]
},
{
    _id: 2,
    price: [ 51, 55, 65, 91, 19, 26 ]
},

Jetzt möchten Sie die Elemente im Array Preis mit einem Wert größer als 50 entfernen. Dann sieht der Befehl wie folgt aus.

db.products.updateMany(
    {},
    { $pull: { price:{ $gte : 50} } }
)

Sie werden sehen, dass wir {} als ersten Parameter von updateMany verwendet haben. Dies liegt daran, dass wir alle Elemente aktualisieren möchten.

Angenommen, Sie möchten nur eine bestimmte _id aktualisieren, dann sieht der Befehl wie folgt aus.

db.products.updateMany(
    {_id: 1},
    { $pull: { price:{ $gte : 50} } }
)

Sie können auch den $in-Operator in der _id verwenden, um mehrere _id zum Aktualisieren auszuwählen und die pull-Operation zu verwenden.

Verwenden Sie $pull im Nested Array

Angenommen, Sie haben die folgende Sammlung von Dokumenten.

db.survey.drop()

db.survey.insertMany( [
   {
      _id: 1,
      results: [
         {
            item: "A",
            score: 5,
            answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
         },
         {
            item: "B",
            score: 8,
            answers: [ { q: 1, a: 8 }, { q: 2, a: 9 } ]
         }
      ]
   },
   {
      _id: 2,
      results: [
         {
            item: "C",
            score: 8,
            answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
         },
         {
            item: "B",
            score: 4,
            answers: [ { q: 1, a: 0 }, { q: 2, a: 8 } ]
         }
      ]
   }
] )

Wir möchten diese Elemente aus dem Array results entfernen, bei denen q gleich 2 und a größer als gleich 8 ist. Dann lautet die Abfrage:

db.survey.updateMany(
  { },
  {
     $pull:
        {
           results:
              {
                 answers: { $elemMatch: { q: 2, a: { $gte: 8 } } }
              }
        }
  }
)

Nach diesem Vorgang sieht die aktualisierte Sammlung wie folgt aus:

{
  _id: 1,
  results: [
    {
      item: 'A',
      score: 5,
      answers: [ { q: 1, a: 4 }, { q: 2, a: 6 } ]
    }
  ]
},
{
  _id: 2,
  results: [
    {
      item: 'C',
      score: 8,
      answers: [ { q: 1, a: 8 }, { q: 2, a: 7 } ]
    }
  ]
}

Dieses Beispiel für ein verschachteltes Array wurde der offiziellen Dokumentation von MongoDB entnommen. Hier können Sie die vollständige Dokumentation lesen und mehr über den Operator $pull erfahren.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website