sql >> Databasteknik >  >> NoSQL >> MongoDB

Morphia List>> return Inbäddat element är inte ett DBO-objekt vid sökoperation

Morphia ser Map som en DB-referens till ett annat dokument snarare än att se det som en inbäddad klass och behandla som ett dokument. Lösningen skulle vara att kommentera kartan @Embedded, men detta är inte möjligt eftersom du inte kan redigera kartklassen.

Det finns ett sätt att uppnå något liknande det du försöker genom att skapa en annan klass och definiera kartan som en egenskap för den här klassen och annotera den som @Embedded.

Ändra Temp-klassen:

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

och skapa en ny klass:

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

}

Jag har markerat de ändringar jag har gjort.

Strukturen som detta producerar är så här:

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


  1. mongodb, pymongo, aggregat ger konstiga utdata (något om markören)

  2. Arbetar du med kapslade objekt i Redis?

  3. MongoDB grupp per timme

  4. Transaktion 1 har genomförts i MongoDB