MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Spring Data MongoRepository Запазване на обекти с различен брой полета

Ще обясня как се обработват различни полета с пример. Следният Game.java Класът POJO представлява картографирането на обекта към game документ за събиране.

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

За Actions клас трябва да предоставите на конструкторите възможните комбинации. Използвайте подходящия конструктор с id , type и т.н. Например създайте Game обект и запишете в базата данни:

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

Това се съхранява в колекцията от бази данни game както следва (заявено от mongo обвивка):

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

Обърнете внимание на actions масив. Тъй като бяхме съхранили само id поле в Game.Actions обект, само това поле се съхранява. Въпреки че указвате всички полета в класа, само тези, предоставени със стойности, се запазват.

Това са още два документа с Game.Actions създаден с type само и id + type използвайки подходящите конструктори:

{
        "_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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB, Mongoose:Как да намеря поддокумент в намерен документ?

  2. Как да възстановите дъмпа във вашия работещ mongodb

  3. Връзка на Robomongo с Meteor mongodb

  4. След като надстроих PHP до версия 7, защо не мога да използвам драйвера mongodb?

  5. Nodejs не може да се свърже с mongodb в облачната обвивка