将 BSON MongoDB 文档映射到 MyClass.class 对象?
Mapping a BSON MongoDB document to a MyClass.class object?
祝大家有个愉快的一天!
我正试图在 JAVA 中理解 MongoDB。我正在尝试将 MongoDB 文档对象映射到我自己的 java 对象。
My MongoDB Document structure:
{
"_id" : {
"$oid" : "5f2d37f1cdf2f93d01fd5f9a"
},
"Person_ID" : {
"$numberInt" : "3"
}, "Name" : "John", "Lastname" : "Doe"
}
MyClass.class model:
public class MyClass {
String oid;
int Person_ID;
int numberInt;
String Name, Lastname;
//empty constructor
public MyClass() {}
// Setters and Getters
}
Using JAVA I try:
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);
}
I'm getting an error:
Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 10 path $._id
我认为我的 MyClass 模型与文档 mongoDB 模型不匹配。
我不太确定哪里有错误。或者要编辑什么?
谢谢。
在最后一行,您试图将 JSON 映射到您的 MyClass java 对象。为此,JSON 结构必须与您的 java class 相匹配。假设 doc.toJson()
的 JSON 结果看起来像您显示的 Mongo 文档,请按如下方式实现您的 class。这个想法是你的 JSON 文档数据类型应该与你的 class 相匹配,例如 JSON 中的 Person_ID
是一个具有三个属性的对象,所以在你的 java class 应该有一个名称为 Person_ID 的变量,它将是另一个具有三个属性的 Class 类型。
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
}
经过几个小时的学习。在 Whosebug 的帮助下,我可以在这里提出一个可以帮助其他人的解决方案。让我们来掌握一下BSON Document的结构,这里我举个例子。
Here:
{
"_id" : {
"$oid" : "5f2d37f1cdf2f93d01fd5f9a"
},
"Person_ID" : {
"$numberInt" : "3"
}, "Name" : "John", "Lastname" : "Doe"
}
MongoDB requires that you have an '_id' field for all documents. If you don't provide one the driver will assign a ObjectId with a generated value.
现在您需要创建此 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 ...
}
假设您的文档结构与上述示例相同,并且您希望将域 mongo 文档映射到您自己的 java class:
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. ****/
{
Dependency:
<!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.0.4</version>
</dependency>
祝大家有个愉快的一天!
我正试图在 JAVA 中理解 MongoDB。我正在尝试将 MongoDB 文档对象映射到我自己的 java 对象。
My MongoDB Document structure:
{
"_id" : {
"$oid" : "5f2d37f1cdf2f93d01fd5f9a"
},
"Person_ID" : {
"$numberInt" : "3"
}, "Name" : "John", "Lastname" : "Doe"
}
MyClass.class model:
public class MyClass {
String oid;
int Person_ID;
int numberInt;
String Name, Lastname;
//empty constructor
public MyClass() {}
// Setters and Getters
}
Using JAVA I try:
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);
}
I'm getting an error: Caused by: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 10 path $._id
我认为我的 MyClass 模型与文档 mongoDB 模型不匹配。 我不太确定哪里有错误。或者要编辑什么? 谢谢。
在最后一行,您试图将 JSON 映射到您的 MyClass java 对象。为此,JSON 结构必须与您的 java class 相匹配。假设 doc.toJson()
的 JSON 结果看起来像您显示的 Mongo 文档,请按如下方式实现您的 class。这个想法是你的 JSON 文档数据类型应该与你的 class 相匹配,例如 JSON 中的 Person_ID
是一个具有三个属性的对象,所以在你的 java class 应该有一个名称为 Person_ID 的变量,它将是另一个具有三个属性的 Class 类型。
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
}
经过几个小时的学习。在 Whosebug 的帮助下,我可以在这里提出一个可以帮助其他人的解决方案。让我们来掌握一下BSON Document的结构,这里我举个例子。
Here:
{
"_id" : {
"$oid" : "5f2d37f1cdf2f93d01fd5f9a"
},
"Person_ID" : {
"$numberInt" : "3"
}, "Name" : "John", "Lastname" : "Doe"
}
MongoDB requires that you have an '_id' field for all documents. If you don't provide one the driver will assign a ObjectId with a generated value.
现在您需要创建此 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 ...
}
假设您的文档结构与上述示例相同,并且您希望将域 mongo 文档映射到您自己的 java class:
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. ****/
{
Dependency:
<!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.0.4</version>
</dependency>