sql >> Database >  >> NoSQL >> MongoDB

Spring Data MongoRepository Objecten opslaan met verschillende aantallen velden

Aan de hand van een voorbeeld zal ik uitleggen hoe met verschillende velden wordt omgegaan. De volgende Game.java De klasse POJO vertegenwoordigt de objecttoewijzing aan het game incasso document.

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

Voor de Actions klasse moet je constructeurs de mogelijke combinaties geven. Gebruik de juiste constructor met id , type , enz. Maak bijvoorbeeld een Game object en sla op in de database:

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

Dit wordt opgeslagen in de databaseverzameling game als volgt (opgevraagd door mongo schaal):

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

Let op de actions reeks. Omdat we alleen de id . hadden opgeslagen veld in het Game.Actions object, wordt alleen dat veld opgeslagen. Ook al specificeert u alle velden in de klasse, alleen die met waarden worden bewaard.

Dit zijn nog twee documenten met Game.Actions gemaakt met type alleen en id + type met behulp van de juiste constructors:

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



  1. JedisPoolConfig kan niet worden toegewezen aan GenericObjectPoolConfig

  2. Matrix-subset in aggregatieframework-pijplijn

  3. Implementeren voor alle klassen BsonIgnoreExtraElements

  4. Hoe een veel-op-veel-relatie van SQL naar mongoDB-verzameling te converteren?