Rückgabe von alten und neuen Entitäten aus Spring / MongoDB findAndModify

8

Wir verwenden MongoDB über Spring Data und verlassen uns auf die Operation findAndModify , um vorhandene Entitäten zu aktualisieren oder neue zu erstellen.

In findAndModify können wir konfigurieren, dass der alte Zustand der Entity oder der neue Entity mit returnNew(...) zurückgegeben wird.

Gibt es eine Möglichkeit, alte und neue Entitäten von findAndModify zurückzugeben?

Wir müssen Entitätszustände vor und nach der Aktualisierung vergleichen, deshalb brauchen wir beide Instanzen.

Im Moment greifen wir auf requireNew(false) zurück und aktualisieren dann manuell eine Kopie der alten Instanz, etwa so:

%Vor%

Funktioniert, ist aber nicht schön, da wir dieselben Dinge wiederholen müssen, die wir bereits in Update auf der Kopie der alten Instanz machen.

Was wir ebenfalls in Betracht gezogen haben, war das erste Laden einer alten Instanz und das Ausführen des Updates, aber es ist nicht sicher, da die Entität möglicherweise zwischen dem Laden und dem Update geändert wurde. Dies kann mit Versionen und optimistischen Sperren behoben werden, aber das macht die Dinge noch komplizierter.

    
lexicore 17.05.2016, 12:15
quelle

2 Antworten

4
  

Gibt es eine Möglichkeit, alte und neue Entitäten von findAndModify zurückzugeben?

Nein , es gibt keine Möglichkeit, alte und neue Werte mit findAndModify .

    
styvane 21.05.2016, 11:03
quelle
0

Nein, es gibt keine Möglichkeit, mit findAndModify alte und neue Werte zurückzugeben.

Wenn Sie jedoch den Status vor und nach dem Aktualisieren vergleichen möchten, führen Sie die folgenden Schritte aus

  1. Laden Sie die Daten kurz vor dem Aktualisieren mit dem Primärschlüssel ab und speichern Sie sie in der alten Variablen
  2. Ändern Sie in Ihrer findAndModify-Abfrage returnNew zu true, um sie unter newData zu speichern

Unterhalb von Beispiel-Sudocode werden Sie beide Werte

zurückgeben %Vor%     
rajadilipkolli 26.05.2016 12:51
quelle