MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Spring Data MongoRepository Speichern von Objekten mit unterschiedlicher Anzahl von Feldern

Anhand eines Beispiels erkläre ich, wie mit unterschiedlichen Feldern umgegangen wird. Die folgende Game.java Die POJO-Klasse repräsentiert die Objektzuordnung zum game Sammlung Dokument.

public class Game {

    String name;
    List<Actions> actions;

    public Game(String name, List<Actions> actions) {
        this.name = name;
        this.actions = actions;
    }

    public String getName() {
        return name;
    }

    public List<Actions> getActions() {
        return actions;
    }

    // other get/set methods, override, etc..


    public static class Actions {

        Integer id;
        String type;

        public Actions() {
        }

        public Actions(Integer id) {
            this.id = id;
        }

        public Actions(Integer id, String type) {
            this.id = id;
            this.type = type;
        }

        public Integer getId() {
            return id;
        }

        public String getType() {
            return type;
        }

        // other methods
    }
}

Für die Actions Klasse müssen Sie Konstruktoren die möglichen Kombinationen bereitstellen. Verwenden Sie den entsprechenden Konstruktor mit id , type usw. Erstellen Sie beispielsweise ein game Objekt und in der Datenbank speichern:

Game.Actions actions= new Game.Actions(new Integer(1000));
Game g1 = new Game("G-1", Arrays.asList(actions));
repo.save(g1);

Diese wird in der Datenbanksammlung game gespeichert wie folgt (abgefragt von mongo Schale):

{
        "_id" : ObjectId("5eeafe2043f875621d1e447b"),
        "name" : "G-1",
        "actions" : [
                {
                        "_id" : 1000
                }
        ],
        "_class" : "com.example.demo.Game"
}

Beachten Sie die Actions Reihe. Da wir nur die id gespeichert hatten Feld in Game.Actions Objekt, wird nur dieses Feld gespeichert. Obwohl Sie alle Felder in der Klasse angeben, werden nur die mit Werten versehenen beibehalten.

Dies sind zwei weitere Dokumente mit Game.Actions erstellt mit type nur und id + type mit den entsprechenden Konstruktoren:

{
        "_id" : ObjectId("5eeb02fe5b86147de7dd7484"),
        "name" : "G-9",
        "actions" : [
                {
                        "type" : "type-x"
                }
        ],
        "_class" : "com.example.demo.Game"
}
{
        "_id" : ObjectId("5eeb034d70a4b6360d5398cc"),
        "name" : "G-11",
        "actions" : [
                {
                        "_id" : 2,
                        "type" : "type-y"
                }
        ],
        "_class" : "com.example.demo.Game"
}