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

Morphia List>> return Вграденият елемент не е DBObject при операция за намиране

Morphia вижда Map като DB препратка към друг документ, вместо да го разглежда като вграден клас и да го третира като документ. Решението би било да анотирате Map @Embedded, но това не е възможно, тъй като не можете да редактирате класа Map.

Има начин да постигнете нещо подобно на това, което се опитвате, като създадете друг клас и дефинирате Map като свойство на този клас и го анотирате като @Embedded.

Променете временния клас:

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();
    }
}

и създайте нов клас:

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

}

Маркирах промените, които направих.

Структурата, която това създава, е следната:

{
    "_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 отпечатва json без интервал, т.е. неприятен json

  2. Разлики между com.mongodb.client.MongoClient и com.mongodb.MongoClient

  3. Експортиране на данни от Mongo/Cassandra към HDFS с помощта на Apache Sqoop

  4. MongoDB:Не може да се канонизира заявката:BadValue Projection не може да има комбинация от включване и изключване

  5. mongoexport без поле _id