Ich habe vor kurzem begonnen, MongoDB zu verwenden, und ich habe eine Frage bezüglich der Aktualisierung von Arrays in einem Dokument. Ich habe eine Struktur wie folgt:
%Vor%Ich versuche, die folgende Abfrage auszuführen:
%Vor%Das Problem besteht darin, dass alle Dokumente aktualisiert werden, aber nur das erste Array-Element in jedem Dokument aktualisiert wird. Gibt es eine Möglichkeit, alle Array-Elemente zu aktualisieren, oder sollte ich versuchen, es manuell zu tun? Danke.
Sie können mehrere Array-Elemente nicht in einem einzigen Aktualisierungsvorgang ändern. Daher müssen Sie das Update wiederholen, um Dokumente zu migrieren, für die mehrere Array-Elemente geändert werden müssen. Sie können dies tun, indem Sie jedes Dokument in der Sammlung durchlaufen und wiederholt ein Update mit $elemMatch
anwenden, bis das Dokument alle relevanten Kommentare ersetzt hat, z. B .:
Beachten Sie, dass Sie, wenn die Effizienz dieses Vorgangs für Ihre Anwendung erforderlich ist, Ihr Schema so normalisieren sollten, dass der Speicherort des Avatars des Benutzers in einem einzelnen Dokument und nicht in jedem Kommentar gespeichert wird.
Eine Lösung könnte darin bestehen, eine Funktion zu erstellen, die mit forEach verwendet und ausgewertet werden kann (damit sie schnell ausgeführt wird). Wenn Ihre Sammlung "Artikel" ist, können Sie Folgendes ausführen:
%Vor%Es scheint, als könnten Sie das tun:
%Vor%Wenn Sie also eine kleine bekannte Anzahl von Array-Elementen haben, könnte dies etwas einfacher sein. Wenn Sie etwas wie "Kommentare. *. Avatar" wollen - nicht sicher, wie das geht. Es ist wahrscheinlich nicht so gut, dass Sie so viele Datenduplikationen haben ..