Tôi sẽ giải thích cách xử lý các trường khác nhau bằng một ví dụ. Game.java
sau Lớp POJO đại diện cho ánh xạ đối tượng tới game
tài liệu sưu tầm.
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
}
}
Đối với Actions
lớp bạn cần cung cấp các hàm tạo với các kết hợp có thể có. Sử dụng hàm tạo thích hợp với id
, type
, v.v. Ví dụ:tạo Game
đối tượng và lưu vào cơ sở dữ liệu:
Game.Actions actions= new Game.Actions(new Integer(1000));
Game g1 = new Game("G-1", Arrays.asList(actions));
repo.save(g1);
Điều này được lưu trữ trong bộ sưu tập cơ sở dữ liệu game
như sau (được truy vấn từ mongo
vỏ):
{
"_id" : ObjectId("5eeafe2043f875621d1e447b"),
"name" : "G-1",
"actions" : [
{
"_id" : 1000
}
],
"_class" : "com.example.demo.Game"
}
Lưu ý các actions
mảng. Vì chúng tôi chỉ lưu trữ id
trong Game.Actions
đối tượng, chỉ trường đó được lưu trữ. Mặc dù bạn chỉ định tất cả các trường trong lớp, nhưng chỉ những trường được cung cấp giá trị mới được tồn tại.
Đây là hai tài liệu khác với Game.Actions
được tạo bằng type
chỉ và id + type
sử dụng các hàm tạo thích hợp:
{
"_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"
}