2016-08-13 7 views
0

Ich bin mir nicht sicher, ob ich die richtige Frage stelle, aber ich nehme an, das ist nur eine einfache Frage mongodb.Mongo Hinzufügen eines Objekts zum ursprünglichen Objekt

Im Moment habe ich dies:

{ 
"_id" : ObjectId("57af98d4d71c4efff5304335"), 
"fullname" : "test", 
"username" : "test", 
"email" : "[email protected]", 
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2" 
} 

und ich möchte eine Übung Objekt wie folgt hinzuzufügen:

{ 
"_id" : ObjectId("57af98d4d71c4efff5304335"), 
"fullname" : "test", 
"username" : "test", 
"email" : "[email protected]", 
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2", 
"exercises": { 
      "benchpress", 
      "rows", 
      "curls", 
} 

Ich bin nur nicht sicher, wie mit dem Objekt Übungen zu erstellen, ohne $push mit der öffnet nur ein Array. Ich möchte kein Array, ich möchte ein Objekt.

Jede Hilfe würde es sehr geschätzt werden.

Antwort

1

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.

  1. Abfrage um das Dokument zu finden
  2. Die Update-Parameter (Dokument zu aktualisieren) zu aktualisieren. Sie können entweder das gesamte Dokument oder nur bestimmte Teile des Dokuments ersetzen (mit $ set).
  3. 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/

Verwandte Themen