MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मॉर्फिया सूची <मानचित्र <स्ट्रिंग, ऑब्जेक्ट>>> वापसी एंबेडेड तत्व खोज ऑपरेशन पर DBObject नहीं है

मॉर्फिया मानचित्र को एक एम्बेडेड वर्ग के रूप में देखने और दस्तावेज़ के रूप में मानने के बजाय किसी अन्य दस्तावेज़ के डीबी संदर्भ के रूप में देखता है। इसका समाधान मैप @एम्बेडेड को एनोटेट करना होगा, लेकिन यह संभव नहीं है क्योंकि आप मैप क्लास को एडिट नहीं कर सकते।

एक अन्य वर्ग बनाकर और मानचित्र को इस वर्ग की संपत्ति के रूप में परिभाषित करके और इसे @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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगोडब चलाने में विफल

  2. मोंगोडीबी - ग्रहण

  3. MongoError:प्रकार के साथ वस्तु से भू कुंजी नहीं निकाल सकते:बिंदु

  4. MongoDB में बहु-दस्तावेज़ ACID लेनदेन का अवलोकन और उनका उपयोग कैसे करें

  5. आप MongoDB में ऑटो-इंक्रिमेंटिंग प्राथमिक आईडी कैसे कार्यान्वित करते हैं?