MongoDB Element aus einem Array entfernen
- MongoDB Element aus einem Array entfernen
-
Verwenden Sie MongoDB
$pull
, um ein Element aus einem Array von Dokumenten zu entfernen -
Verwenden Sie MongoDB
$pullAll
, um ein Element aus einem Array zu entfernen -
Verwenden Sie MongoDB
$pop
, um ein Element aus einem Array zu entfernen -
Verwenden Sie MongoDB
$unset
, um ein Feld zu entfernen, das das angegebene Element enthält -
Verwenden Sie den Positionsoperator von MongoDB, um das Element auf
null
zu setzen, anstatt es zu 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 angegebenenWert
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 dieBedingung
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.
Verwandter Artikel - MongoDB Array
- MongoDB Element zu Array hinzufügen
- Suchen Sie ein bestimmtes Dokument mit Array in MongoDB
- Verwendung von forEach() zur Aktualisierung eines Array-Feldes in der MongoDB-Shell