java - 关于使用MongoDB java driver的一些问题

标签 java json mongodb jersey jackson

我正在使用 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/

相关文章:

python - 与 BaseSpider 一起使用的正则表达式会导致 CrawlSpider 出现错误

javascript - 如何从 Google 表格中获取超链接

javascript - 动态创建嵌套 JSON 对象父级和子级

mongodb - 如何检索 []bson.M 类型的 map

java - 使用 Spring 3.1 的 Java 配置来配置 spring-data-mongodb 存储库

java - sql跨行和向下列添加值

java - 文件 API 导致 ANR

mongodb - MongoDB + Grails:如何使用Grails中的$ all运算符

java - 你能解释一下 Java 中的 "isXxx"方法名吗?

java - Android 应用程序错误 NullPointerException?