我是MongoDb的新手。我使用find并以JSON格式获得结果。
{"Name": "Harshil", "Age":20}
所以我需要的是在java中解析它并获取变量中的值。
String name should contain Harshil
int age should contain 20
有没有办法将这些细节存储在JAVA对象中?
答案 0 :(得分:6)
以下是连接MongoDB的方法:
MongoClient client = new MongoClient("localhost",27017); //with default server and port adress
DB db = client.getDB( "your_db_name" );
DBCollection collection = db.getCollection("Your_Collection_Name");
连接后,您可以从服务器提取数据。下面,我假设您的文档有名称和年龄字段:
DBObject dbo = collection.findOne();
String name = dbo.get("Name");
int age = dbo.get("Age");
答案 1 :(得分:4)
看看GSON图书馆。它将JSON转换为Java对象,反之亦然。
答案 2 :(得分:3)
有许多方法和工具,其中一种是gson
class Person {
private String name;
private int age;
public Person() {
// no-args constructor
}
}
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
如果我没有添加此link,我会感到松懈。
答案 3 :(得分:1)
您可以使用Java驱动程序执行此操作:
DBObject dbo = ...
String s = dbo.getString("Name")
int i = dbo.getInt("Age")
应该考虑在Java驱动程序之上使用另一个框架我有多个要管理的对象。
答案 4 :(得分:1)
由于我们不想使用不建议使用的方法,因此可以使用以下代码进行操作:
MongoClient mongo = new MongoClient( "localhost" , 27017 );
MongoDatabase database = mongo.getDatabase("your_db_name");
MongoCollection<Document> collection = database.getCollection("your_collection_name");
FindIterable<Document> iterDoc = collection.find();
MongoCursor<Document> dbc = iterDoc.iterator();
while(dbc.hasNext()){
try {
JsonParser jsonParser = new JsonFactory().createParser(dbc.next().toJson());
ObjectMapper mapper = new ObjectMapper();
Person person = mapper.readValue(jsonParser, Person.class);
String name = person.get("Name");
String age = person.get("Age");
} catch (Exception e){
e.printStackTrace();
}
JsonFactory,JsonParser等正在使用Jackson的反序列化文档到相关的Entity对象。
答案 5 :(得分:0)
您是否考虑过Morphia?
@Entity
class Person{
@Property("Name") Date name;
@Property("Age") Date age;
}
答案 6 :(得分:0)
自发布原始答案以来,DBObject
已弃用相应的方法client.getDB
。对于那些可能正在寻找解决方案的人,自新的更新以来,我已尽力翻译。
MongoClient client = new MongoClient("localhost",27017); //Location by Default
MongoDatabase database = client.getDatabase("YOUR_DATABASE_NAME");
MongoCollection<Document> collection = database.getCollection("YOUR_COLLECTION_NAME");
连接到文档后,有许多熟悉的方法可以将数据作为Java对象获取。假设您计划包含多个文档,其中包含人name
及其age
我建议收集所有文档(您可以将其显示为包含名称和年龄的行),然后您可以选择通过ArrayList
中的文档将它们转换为java对象,如下所示:
List<Document> documents = (List<Document>) collection.find().into(new ArrayList<Document>());
for (Document document : documents) {
Document person = documents.get(document);
String name = person.get("Name");
String age = person.get("Age");
}
老实说,for
循环不是一种很好的方式,但我想帮助社区努力弃用。
答案 7 :(得分:0)
我更喜欢使用新的Mongodb Java API。它非常干净清晰。
public MyEntity findMyEntityById(long entityId) {
List<Bson> queryFilters = new ArrayList<>();
queryFilters.add(Filters.eq("_id", entityId));
Bson searchFilter = Filters.and(queryFilters);
List<Bson> returnFilters = new ArrayList<>();
returnFilters.add(Filters.eq("name", 1));
Bson returnFilter = Filters.and(returnFilters);
Document doc = getMongoCollection().find(searchFilter).projection(returnFilter).first();
JsonParser jsonParser = new JsonFactory().createParser(doc.toJson());
ObjectMapper mapper = new ObjectMapper();
MyEntity myEntity = mapper.readValue(jsonParser, MyEntity.class);
return myEntity;
}
详细信息 http://ashutosh-srivastav-mongodb.blogspot.in/2017/09/mongodb-fetch-operation-using-java-api.html
答案 8 :(得分:0)
尝试使用此功能将mongodb返回的JSON转换为自定义Java对象列表。
MongoClient mongodb = new MongoClient("localhost", 27017);
DB db = mongodb.getDB("customData-database");
DBCursor customDataCollection = db.getCollection("customDataList").find();
List<CustomJavaObject> myCustomDataList = null; // this list will hold your custom data
JSON json = new JSON();
ObjectMapper objectMapper = new ObjectMapper();
try {
//this is where deserialiazation(conversion) takes place
myCustomDataList = objectMapper.readValue(json.serialize(customDataCollection),
new TypeReference<List<Restaurant>>() {
});
} catch (IOException e) {
e.printStackTrace();
}
CustomJavaObject:
public class CustomJavaObject{
//your json fields go here
String field1, field2;
int num;
ArrayList<String> attributes;
//....write relevantgetter and setter methods
}
样本json:
{
"field1": "Hsr Layout",
"field2": "www.google.com",
"num": 20,
"attributes": [
"Benagaluru",
"Residential"
]
},
{
"field1": "BTM Layout",
"field2": "www.youtube.com",
"num": 10,
"attributes": [
"Bangalore",
"Industrial"
]
}