MongoDB将数据获取到java对象中

lmvvr0a8  于 2022-12-17  发布在  Java
关注(0)|答案(9)|浏览(297)

我是MongoDb的新手,我使用find并得到JSON格式的结果。

{"Name": "Harshil", "Age":20}

所以我需要用java解析这个,然后得到变量的值。

String name should contain Harshil
int age should contain 20

有没有办法把这些细节存储在JAVA对象中?

z4iuyo4d

z4iuyo4d1#

下面是如何连接到您的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");
0ejtzxu1

0ejtzxu12#

看一下GSON库,它将JSON转换为Java对象,反之亦然。

fbcarpbf

fbcarpbf3#

方法和工具很多,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,我会感到松懈。

9gm1akwq

9gm1akwq4#

您可以使用Java驱动程序来完成此操作:

DBObject dbo = ...
String s = dbo.getString("Name")
int i = dbo.getInt("Age")

如果您有多个对象要管理,则应考虑在Java驱动程序之上使用另一个框架。

wecizke3

wecizke35#

由于我们不想使用过时的方法,因此,您可以使用以下代码来执行此操作:

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

Jackson使用JsonFactory、JsonParser等将Document反序列化为相关的Entity对象。

tez616oj

tez616oj6#

你考虑过Morphia吗?

@Entity
class Person{
   @Property("Name") Date name;
   @Property("Age") Date age;
}
nkcskrwz

nkcskrwz7#

我更喜欢使用新的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

bvpmtnay

bvpmtnay8#

更新的方法[由于getDB()已弃用]

自从最初的答案发布以来,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中,那么您可以简单地挑选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循环并不是一种很好的方式,但我想帮助社区与弃用作斗争。

cig3rfwq

cig3rfwq9#

尝试使用此函数将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();
}

自定义Java对象:

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"
]
}

相关问题