MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Danh sách Morphia >> trả về Phần tử được nhúng không phải là một DBObject trên thao tác tìm

Morphia coi Bản đồ như một tham chiếu DB đến một tài liệu khác chứ không phải coi nó như một lớp nhúng và coi nó như một tài liệu. Giải pháp là chú thích Bản đồ @Embedded, nhưng điều này không thể thực hiện được vì bạn không thể chỉnh sửa lớp Bản đồ.

Có một cách để đạt được điều gì đó tương tự như những gì bạn đang cố gắng bằng cách tạo một lớp khác và xác định Bản đồ là thuộc tính của lớp này và chú thích nó là @Embedded.

Thay đổi lớp Temp:

public class Temp {
    @Id String _id;

    @Embedded // CHANGE HERE
    List<MapProxy> strings; // CHANGE HERE

    public Temp(){
        strings=new LinkedList<MapProxy>(); // CHANGE HERE
    }

    public static void main(String...args) throws UnknownHostException, MongoException{
        Mongo mongo=null;
        Morphia morphia=null;
        Datastore ds=null;
        mongo = new Mongo();
        morphia = new Morphia();
        morphia.map(Temp.class);
        ds = morphia.createDatastore(mongo, "test2");
        Temp t = new Temp();
        t._id ="hi";      
        MapProxy mp = new MapProxy(); // CHANGE HERE    
        mp.m.put("Hi","1"); // CHANGE HERE
        mp.m.put("Hi2",2); // CHANGE HERE
        t.strings.add(mp); // CHANGE HERE
        ds.save(t);
        t=ds.get(t);
        ds.ensureIndexes();
    }
}

và tạo một lớp mới:

@Embedded
public class MapProxy {
    public Map<String,Object> m = new HashMap<String, Object>();

}

Tôi đã đánh dấu những thay đổi mà tôi đã thực hiện.

Cấu trúc mà nó tạo ra là như thế này:

{
    "_id" : "hi",
    "className" : "YOUR CLASS NAME HERE",
    "strings" : 
                [ { 
                     "m" : 
                            { 
                                "Hi" : "1" , 
                                "Hi2" : 2
                            } 
                } ]
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:truy vấn phạm vi về thời gian chèn với _id và ObjectID

  2. MongoDB truy vấn nhiều bộ sưu tập cùng một lúc

  3. Tìm phần tử dựa trên hai giá trị

  4. Cảnh báo:Đang truy cập thuộc tính không tồn tại 'MongoError' của xuất mô-đun bên trong phụ thuộc vòng tròn

  5. Làm cách nào để hợp nhất nhiều trường trong một tập hợp?