MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Spring Data MongoRepository Enregistrement d'objets avec un nombre de champs différent

Je vais vous expliquer comment différents champs sont traités avec un exemple. Le Game.java suivant La classe POJO représente le mappage d'objet au game dossier de collecte.

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
    }
}

Pour les Actions classe, vous devez fournir aux constructeurs les combinaisons possibles. Utilisez le constructeur approprié avec id , type , etc. Par exemple, créez un Game objet et enregistrer dans la base de données :

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

Ceci est stocké dans la collection de base de données game comme suit (interrogé à partir de mongo coque):

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

Notez les actions déployer. Comme nous n'avions stocké que l'id champ dans le Game.Actions objet, seul ce champ est stocké. Même si vous spécifiez tous les champs de la classe, seuls ceux fournis avec des valeurs sont conservés.

Ce sont deux autres documents avec Game.Actions créé avec type uniquement et id + type en utilisant les constructeurs appropriés :

{
        "_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"
}