Verschiebe Objekt in ein Array, wenn das Array existiert, andernfalls erzeuge das Array mit Objekt in MongoDB

8

Ich habe eine Sammlung mit einem Dokument wie folgt:

%Vor%

Ich habe ein neues Objekt für myArray . Ich möchte eine Abfrage schreiben, um nur ein Dokument zu aktualisieren.

Wenn die Abfrage dem Dokument mit _id : "abcd" entspricht, dann schieben Sie das neue Objekt in myArray field:

%Vor%

Und wenn die Abfrage mit _id : "efgh" übereinstimmt, erstellen Sie das Feld myArray mit einem neuen Objekt darin:

%Vor%

Wie kann ich das erreichen?

    
iamhimadri 02.08.2015, 09:37
quelle

2 Antworten

16

Um alle möglichen Fälle hier zu erklären, betrachten Sie jedes Dokument Fall:

Wenn Ihr zu änderndes Dokument so aussieht:

%Vor%

Dann eine Update-Anweisung wie folgt:

%Vor%

Ergebnisse in diesem:

%Vor%

So wird das Array erstellt und das neue Element angehängt.

Wenn Ihr Dokument bereits ein solches Array hat:

%Vor%

Und Sie tun im Grunde die gleiche Aussage:

%Vor%

Dann wird der Inhalt des neuen Dokuments an das vorhandene Array angehängt:

%Vor%

Wenn Ihr Originaldokument jedoch das benannte Feld hat, aber kein Array ist, wie dies:

%Vor%

Stellen Sie dann sicher, dass es kein Array ist, indem Sie die Abfragebedingung testen und % verwenden. co_de% stattdessen:

%Vor%

Dadurch wird das Element, das kein Array ist, überschrieben (die Punktnotation "myArray.0" bedeutet das erste Array-Element, das nicht wahr ist) mit einem neuen Array, das Ihren Inhalt enthält. Das Ergebnis ist das gleiche wie das Original:

%Vor%     
Blakes Seven 02.08.2015, 10:31
quelle
2

$ Push ist das, was Sie brauchen, um dies zu erreichen. Wenn myArray bereits vorhanden ist, fügt $ push das newObject ein (ähnlich der STACK-Datenstrukturoperation). Wenn das myArray nicht existiert, erstellt es das Feld "myArray" als Schlüssel und fügt das newObject in es ein (ähnlich wie bei $ Set opt.)

Betrachten Sie ein anderes Beispieldokument:

%Vor%

So können wir nun das folgende Objekt einfügen:

%Vor%

Abfrage:

%Vor%

Nach der Ausführung der obigen Abfrage lautet das Ergebnis wie folgt:

%Vor%

Sehen wir uns nun ein anderes Beispiel an, in dem der Schlüssel "myArray" im Dokument nicht vorhanden ist:

%Vor%

Damit können wir das folgende Objekt einfügen:

%Vor%

Abfrage:

%Vor%

Ergebnis der obigen UPDATE-Operation ist unten:

%Vor%     
Yathish Manjunath 02.08.2015 10:24
quelle

Tags und Links