Push-Objekt in ein array, wenn das array existiert ansonsten erstellen Sie das array mit dem Objekt in der MongoDB
Habe ich die Sammlung mit einem Dokument wie diesem:
{
_id : "abcd",
name : "Tom",
myArray : [
{
field1 : "",
field2 : ""
}
]
},
{
_id : "efgh",
name : "Jerry"
}
Habe ich ein neues Objekt für myArray
. Ich möchte eine Abfrage schreiben, update nur ein Dokument.
Wenn die Abfrage entspricht das Dokument mit _id : "abcd"
, dann schieben Sie das neue Objekt in myArray
Feld:
{
_id : "abcd",
name : "Tom",
myArray : [
{
field1 : "",
field2 : ""
},
{
//new object
}
]
}
Und wenn die Abfrage entspricht mit _id : "efgh"
erstellen das Feld myArray
mit dem neuen Objekt-innen:
{
_id : "efgh",
name : "Jerry"
myArray : [
{
//new object
}
]
}
Wie kann ich das erreichen?
- Was möchten Sie tun? Set "myArray" in "efgh", um den gleichen Inhalt wie "abcd"? Oder wollen Sie, um ein neues array-Element auf "abcd" und "efgh"? Es ist ein Bearbeiten link auf Ihre Frage, wo Sie können, hinzufügen von details zu machen Sie Ihre Absichten klar.
- geändert, Frage, hoffe, Sie verstehen...
- Noch unklar ist, was meinen Sie mit "elseif" hier. Meinst du aktualisieren "beide" Dokumente, oder sind Sie nur auswählen aktualisieren "" von den Dokumenten?
- Nein, ich möchte nicht aktualisieren Dokument. Update nur ein Dokument zu einem Zeitpunkt.
- Sie haben sogar versucht, hier etwas? Ich vermute nicht, denn Sie würden sehen, was passiert, wenn Sie
$push
ein array zu einem Dokument, wo es nicht vorhanden ist, dass es erzeugt nur das array. Wo gibt es ein bestehendes array, dann neues Dokument angehängt. Also entweder Sie haben nicht versucht, oder es fehlt noch etwas, aus Ihrer Frage, was Sie wirklich wollen, zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erklären, alle möglichen Fälle hier, die betrachten Sie jedes Dokument Fall:
Wenn Ihr Dokument zu ändern, sieht wie folgt aus:
Dann eine update-Anweisung wie dieser:
Ergebnisse, in:
Damit das array erstellt wird, und das neue Element angehängt.
Wenn Ihr Dokument bereits ein array wie dieses:
Und Sie tun im Grunde die gleiche Aussage:
Dann das neue Dokument-Inhalt wird an die vorhandene array:
Wenn jedoch das ursprüngliche Dokument hat den Namen Feld, aber es ist nicht ein array wie dieses:
Dann stellen Sie sicher, es ist nicht ein array von Tests im Abfrage-Zustand und mit
$Satz
statt:Wird sicher überschreiben das element ist kein array ( dot-notation "myArray.0" bedeutet erste array-element, das ist nicht wahr ) mit einem neuen array mit dem Inhalt. Das Ergebnis ist das gleiche wie das original:
$push
können Sie verwendet werden$addToSet
und wird es schauen, dass das array nicht enthalten, die genau die gleiche json-Dokument?$Push ist, was Sie brauchen, um dies zu erreichen.
Wenn Sie die myArray ist bereits vorhanden, dann $(push) legen Sie die newObject, um es( ähnlich wie die STACK-Datenstruktur-Betrieb ).
Wenn Sie die myArray existiert nicht, es wird das Feld "myArray" als Schlüssel und legen Sie die newObject in es ( ähnlich wie $Set oprtaion )
Betrachten wir ein anderes Beispiel unten Dokument :
so, jetzt können Legen Sie die unter-Objekt zu :
Abfrage :
nach Ausführung der obigen Abfrage, Ergebnis ist wie folgt :
Nun betrachten wir ein weiteres Beispiel, wo "myArray" der Schlüssel ist NICHT im Dokument VORHANDEN :
so können legen Sie die unter-Objekt :
Abfrage :
Ergebnis der obigen UPDATE-Vorgang unten :