Ein object
ist ein Schlüssel-Wert-Paar. In Ihrer Darstellung des zweiten Dokuments haben Sie ein verschachteltes Dokument exercises
als Schlüssel und seinen Wert als ein Objekt, das nur Zeichenfolgen enthält. Siehst du da nicht etwas Merkwürdiges? Ein Objekt ohne Schlüssel?
Es sollte wahrscheinlich eine von Strings sein. Beachten Sie, dass ein tatsächlich ein object
ist, wobei der Schlüssel der numerische Index ist, der bei 0 beginnt und der Wert string
in dieser Position ist.
(Sie haben ein zusätzliches Komma und eine fehlende curly-brace
. Lets beheben das.) Dies ist das Dokument, das wir nach der Aktualisierung des Dokuments sehen möchten.
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "[email protected]",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises": [
"benchpress",
"rows",
"curls"
]
}
Nun zurück zu Ihrer Frage. Wie können wir das bestehende Dokument mit dem Übungsdokument aktualisieren? Es ist ziemlich einfach. Mongodb hat eine 'update'-Methode, die genau das macht. Da wir nicht das gesamte Dokument ersetzen und nur zusätzliche Felder hinzufügen möchten, sollten wir $set
verwenden, um bestimmte Felder zu aktualisieren. Starten Sie die Mongo-Shell und wechseln Sie mit use db-name
zu Ihrer Datenbank. Führen Sie dann den folgenden Befehl aus. Ich nehme an, Sie haben ein bestehendes Dokument mit id
ObjectId ("57af98d4d71c4efff5304335"). Beachten Sie, dass ObjectId ein BSON
-Datentyp ist.
db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, { $set: {"exercises": ["benchpress", "rows", "curls"] } })
Dies wird das Dokument als
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "[email protected]",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises" : [
"benchpress",
"rows",
"curls"
]
}
Hier Kratzer bezieht sich auf den Kollektionsnamen aktualisieren. Die Methode update
benötigt 3 Parameter.
- Abfrage um das Dokument zu finden
- Die Update-Parameter (Dokument zu aktualisieren) zu aktualisieren. Sie können entweder das gesamte Dokument oder nur bestimmte Teile des Dokuments ersetzen (mit $ set).
- Ein optionales Objekt, das Mongodb veranlassen kann, den Datensatz einzufügen, wenn das Dokument nicht existiert (
upsert
) oder mehrere Dokumente zu aktualisieren, die den Kriterien entsprechen (multiple
).
EXTRA
Warnung: Wenn Sie die folgenden in der Mongo-Shell ausgeführt werden
db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, {"exercises": ["benchpress", "rows", "curls"] })
das gesamte Dokument mit Ausnahme der _id
Feld ersetzt werden würde. So würde der Datensatz etwa so aussehen:
Sie sollten dies nur tun, wenn Sie sich der Konsequenz bewusst sind.
Hoffe, das hilft. Weitere Informationen finden Sie unter https://docs.mongodb.com/manual/reference/method/db.collection.update/