我正在使用 Jersey 编写 RESTful 服务,数据存储在 Mongodb 数据库中。
我想从数据库中获取一个项目并将其 JSON 格式返回给客户端。这是我的代码:
try {
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("entities");
// Build search query
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("entity_name", entityName);
DBCursor cursor = coll.find(searchQuery);
try {
if (cursor.hasNext()) {
return cursor.next().toString();
} else {
return "Not found.";
}
} finally {
cursor.close();
mongoClient.close();
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
return "System error.";
但是我得到的数据包含一个名为id的字段:
"_id":{
"$oid":"525c8a4df33fa1b05dab6e6c"
},
我想从结果中删除该字段。怎么做?
第二个问题是: 结果中的某些字段是日期。但结果是这样的:
"publish_date":{
"$date":"1970-01-15T16:48:14.400Z"
},
我希望它显示如下:
"publish_date":1970-01-15
我正在考虑使用一些像Jackson这样的第三方库来存储所有数据,然后返回一个Jackson对象给客户端(Jersey可以自动将Jackson对象转换为正确的JSON格式数据)。但就我而言,字段的数量不是固定的。我无法创建实体类来表示结果的结构。
你们有什么好的解决方案吗?
谢谢!
最佳答案
对于问题的第一部分,您需要使用投影来隐藏结果中的某些字段。
DBCursor cursor = coll.find(searchQuery, new BasicDBObject("_id", 0));
对于问题的第二部分,MongoDB Java 驱动程序可以使用以下命令返回 Date 对象:
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
document = cursor.next();
Date date = document.getDate("publish_date");
String dateStr = dateFormat.format(date);
如果您想将此字符串放回到结果文档中以便将其打印为 JSON,您可能可以执行以下操作:
document.put("publish_date", dateStr);
否则,您可以使用新值构建 BasicDBObject。
关于java - 关于使用MongoDB java driver的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626838/