sql >> データベース >  >> NoSQL >> MongoDB

Morphia List >> return埋め込み要素は、検索操作でDBObjectではありません

    Morphiaは、Mapを埋め込みクラスと見なしてドキュメントとして扱うのではなく、別のドキュメントへのDB参照と見なします。解決策は、Map @Embeddedに注釈を付けることですが、Mapクラスを編集できないため、これは不可能です。

    別のクラスを作成し、Mapをこのクラスのプロパティとして定義し、@ Embeddedとしてアノテーションを付けることで、試みているものと同様のことを実現する方法があります。

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

    新しいクラスを作成します:

    @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. Mongoose .save()がデータベースに保存されていませんか?

    2. MongoDB $ toDecimal

    3. Meteorアプリで代替のMongoDBに接続できません

    4. Heroku Redisをワイプする方法は?