सबका दिन शुभ हो!

मैं जावा में MongoDB को समझने की कोशिश कर रहा हूँ। मैं अपने स्वयं के जावा ऑब्जेक्ट में मोंगोडीबी दस्तावेज़ ऑब्जेक्ट को मैप करने का प्रयास कर रहा हूं।

मेरी MongoDB दस्तावेज़ संरचना:

{
    "_id" : {
        "$oid" : "5f2d37f1cdf2f93d01fd5f9a"
    },
    "Person_ID" : {
        "$numberInt" : "3"
    }, "Name" : "John", "Lastname" : "Doe"
}

MyClass.class मॉडल:

public class MyClass {
    String oid;
    int Person_ID;
    int numberInt;
    String Name, Lastname;

   //empty constructor
   public MyClass() {}

   // Setters and Getters
}

जावा का उपयोग करके मैं कोशिश करता हूं:

public static void main(String[] args) {
    
    MongoClientURI uri = new MongoClientURI(
        "mongodb+srv://<username>:<password>@cluster.lt8te.mongodb.net/dbProject? 
          retryWrites=true&w=majority"); 
   
    MongoClient client = new MongoClient(uri);            
    MongoDatabase db = client.getDatabase("dbProject");
    MongoCollection<Document> coll = db.getCollection("myCollection");
    Document doc = (Document) coll.find().first();
    
    System.out.println(doc.toJson());
    
    Gson gson = new Gson();
    MongoObject mongoObj = gson.fromJson(doc.toJson(), MyClass.class);
}

मुझे एक त्रुटि मिल रही है: इसके कारण: java.lang.IllegalStateException: एक स्ट्रिंग की उम्मीद थी लेकिन लाइन 1 कॉलम 10 पथ $._id पर BEGIN_OBJECT था।

मुझे लगता है कि मेरा MyClass मॉडल दस्तावेज़ mongoDB मॉडल से मेल नहीं खाता है। मुझे पूरा यकीन नहीं है कि मुझसे कहां गलती हुई है। या क्या संपादित करना है? शुक्रिया।

0
Petr Fořt Fru-Fru 7 अगस्त 2020, 21:41

2 जवाब

सबसे बढ़िया उत्तर

आखिरी पंक्ति में आप एक JSON को अपने MyClass जावा ऑब्जेक्ट में मैप करने का प्रयास कर रहे हैं। इसके लिए जेएसओएन संरचना को काम करने के लिए आपके जावा वर्ग से मेल खाना पड़ेगा। मान लें कि doc.toJson() से JSON परिणाम आपके द्वारा दिखाए गए Mongo दस्तावेज़ जैसा दिखेगा, अपनी कक्षा को नीचे की तरह लागू करें। विचार यह है कि आपका JSON दस्तावेज़ डेटा प्रकार आपकी कक्षा के साथ मेल खाना चाहिए, उदाहरण के लिए Person_ID आपके JSON में एक ऑब्जेक्ट है जिसमें तीन विशेषताएँ हैं इसलिए आपके जावा क्लास में Person_ID नाम वाला एक वैरिएबल होना चाहिए जो एक होगा तीन विशेषता के साथ एक और वर्ग प्रकार।

public class MyClass {
    ID _id;
    Person Person_ID;

   //empty constructor
   public MyClass() {}

   // Setters and Getters


}

Class ID{
   public String oid;
   //Getter setter
}

Class Person {
    int numberInt;
    String Name;
    String Lastname;

//Getter setter
}
1
Dharman 7 अगस्त 2020, 22:33

इसलिए कुछ घंटों की पढ़ाई के बाद। और StackOverFlow की मदद से, मैं यहाँ एक समाधान प्रस्तुत कर सकता हूँ जो दूसरों की मदद कर सकता है। आइए बीएसओएन दस्तावेज़ की संरचना को समझें, जिसे मैंने यहां एक उदाहरण के रूप में दिया है।

यहां:

{
   "_id" : {
       "$oid" : "5f2d37f1cdf2f93d01fd5f9a"
   },
   "Person_ID" : {
       "$numberInt" : "3"
   }, "Name" : "John", "Lastname" : "Doe"

}

MongoDB के लिए आवश्यक है कि आपके पास सभी दस्तावेज़ों के लिए एक '_id' फ़ील्ड हो। यदि आप एक प्रदान नहीं करते हैं तो ड्राइवर एक उत्पन्न मान के साथ एक ObjectId असाइन करेगा।

अब आपको इस JSON का ऑब्जेक्ट मॉडल बनाना होगा। इस तरह: (खेतों के क्रम को बनाए रखना महत्वपूर्ण है।)

import org.bson.types.ObjectId;

public class ModelMongo 
{
    ObjectId _id;
    int Person_ID;
    String Name;
    String Lastname;

    public ModelMongo(ObjectId id, int Person_ID, String Name, String Lastname) 
    }
        this._id = id;
        this.Person_ID = Person_ID;
        this.Name = Name;
        this.Lastname = Lastname;
    {

      // Setter and Getter ...      
}

मान लें कि आपके पास ऊपर दिए गए उदाहरण के समान दस्तावेज़ संरचना है और आप अपने स्वयं के जावा वर्ग में एक डोमेन मोंगो दस्तावेज़ को मैप करना चाहते हैं:

public static void main(String[] args)
}
    MongoClient client = new MongoClient(uri);            
    MongoDatabase db = client.getDatabase("dbProject");
    MongoCollection<org.bson.Document> coll = db.getCollection("myCollection");
    Document doc = (Document) coll.find().first();

    Gson gson = new Gson();
    ModelMongo model = gson.fromJson(doc.toJson(), ModelMongo.class);  

    /***                                                ****
    * Now in the variable model is a Document from MongoDB *
    * Access to variables of that Object possible through  *
    * its Getter methods.                              ****/
{

निर्भरता:

<!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>bson</artifactId>
    <version>4.0.4</version>
</dependency>


  
0
Petr Fořt Fru-Fru 8 अगस्त 2020, 02:49