MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Spring Data MongoRepository Menyimpan Objek dengan Jumlah Bidang yang Berbeda

Saya akan menjelaskan bagaimana berbagai bidang ditangani dengan sebuah contoh. Berikut Game.java Kelas POJO mewakili pemetaan objek ke game dokumen koleksi.

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

Untuk Actions kelas Anda perlu menyediakan konstruktor dengan kemungkinan kombinasi. Gunakan konstruktor yang sesuai dengan id , type , dll. Misalnya, buat Game objek dan simpan ke database:

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

Ini disimpan dalam koleksi database game sebagai berikut (ditanyakan dari mongo cangkang):

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

Perhatikan actions Himpunan. Karena kami hanya menyimpan id bidang di Game.Actions objek, hanya bidang itu yang disimpan. Meskipun Anda menentukan semua bidang di kelas, hanya bidang yang disediakan dengan nilai yang dipertahankan.

Ini adalah dua dokumen lagi dengan Game.Actions dibuat dengan type saja dan id + type menggunakan konstruktor yang sesuai:

{
        "_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. Luwak .save() tidak menyimpan ke database?

  2. Jalankan MongoTemplate.aggregate tanpa pengambilan baris

  3. Cara yang benar untuk membagi koleksi dan cara menginterpretasikan hasilnya

  4. Pembaruan MongoDB. Mencoba mengatur satu bidang dari properti yang lain

  5. Bagaimana Menemukan Indeks yang Tidak Digunakan di MongoDB?