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.