sql >> Database teknologi >  >> NoSQL >> MongoDB

Morphia List>> return Indlejret element er ikke et DBO-objekt ved søgeoperation

Morphia ser Map som en DB-reference til et andet dokument i stedet for at se det som en indlejret klasse og behandle det som et dokument. Løsningen ville være at annotere kortet @Embedded, men dette er ikke muligt, da du ikke kan redigere kortklassen.

Der er en måde at opnå noget, der ligner det, du forsøger, ved at oprette en anden klasse og definere kortet som en egenskab for denne klasse og annotere det som @Embedded.

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

og opret en ny klasse:

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

}

Jeg har markeret de ændringer, jeg har foretaget.

Strukturen, som dette producerer, er som denne:

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


  1. Hvordan udsteder jeg HGET/GET-kommando til Redis Database via Node.js?

  2. opdater flere poster ved hjælp af mongoosejs i node

  3. Indsæt data i MongoDB ved hjælp af PHP

  4. PostgreSQL og MongoDB WHERE IN betingelser