Ich verwende Spring Data mit einer MongoDB, um einige Dokumente zu speichern. Beim Speichern von Dokumenten möchte ich, dass Mongo keine leeren Objekte enthält. (Wie) kann dies erreicht werden?Spring Data MongoDB - leere Objekte ignorieren
sagen, dass ich die folgende Hauptklasse haben:
@Document(collection = "main_doc")
public class MainDoc {
@Id
private String id;
private String title;
private SubDoc subDoc;
}
, die ein Objekt der folgenden Klasse enthält:
public class SubDoc {
private String title;
private String info;
}
Nun, wenn ich das folgende Objekt zu speichern versuchen würde:
MainDoc main = new MainDoc();
main.setTitle("someTitle");
main.setSubDoc(new SubDoc());
Hinweis: in Wirklichkeit kontrolliere ich nicht die Tatsache, dass der SubDoc so eingestellt ist. Es kann entweder leer oder ausgefüllt sein. Was ich will ist, dass, wenn die Eigenschaften/Felder eines Elements alle NULL sind, es überhaupt nicht in Mongo gespeichert wird. Diese ergibt so etwas in Mongo:
{
"_id" : "5a328f9a-6118-403b-a3a0-a55ce52099f3",
"title": "someTitle",
"subDoc": {}
}
Was Ich mag, ist, dass, wenn ein Element nur null Eigenschaften enthält, werden diese nicht gespeichert, so für das obige Beispiel ich folgendes Ergebnis möchte :
@NoRepositoryBean
public interface MainRepo extends CrudRepository<MainDoc, String> {
// save inherited
}
Vielen Dank im Voraus:
{
"_id" : "5a328f9a-6118-403b-a3a0-a55ce52099f3",
"title": "someTitle"
}
Speichern von Dokumenten mit Hilfe eines Endlagers wie folgt durchgeführt.
Rufen Sie nicht 'main.setSubDoc (new SubDoc());' Sie setzen es auf leer. Wenn du das nicht nennst, wird es nicht da sein. –
Ja, aber in meinem tatsächlichen Anwendungsfall kann ich diesen Teil nicht kontrollieren. Ich brauche es wirklich während des Mappings. Entschuldigung, hätte mir das deutlicher machen sollen. – CounterFlame
Können Sie in Ihrer Frage dann genauer sein? Es scheint mir, dass, wenn es keine Daten gibt, die Sie dort eingeben, Sie einfach nicht anrufen. Vielleicht brauchst du ein "if" in deinem Code. –