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:
Und wenn die Abfrage mit _id : "efgh"
übereinstimmt, erstellen Sie das Feld myArray
mit einem neuen Objekt darin:
Wie kann ich das erreichen?
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%$ 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%Tags und Links mongodb mongodb-query