Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于使用MongoDB java驱动程序的几个问题_Java_Json_Mongodb_Jersey_Jackson - Fatal编程技术网

关于使用MongoDB java驱动程序的几个问题

关于使用MongoDB java驱动程序的几个问题,java,json,mongodb,jersey,jackson,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("

我正在使用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的字段:

我想从结果中去掉这个字段。怎么做

第二个问题是: 结果中的某些字段是日期。但结果是:

"publish_date":{
"$date":"1970-01-15T16:48:14.400Z"
},
我希望它显示为:

"publish_date":1970-01-15
我曾考虑使用一些第三方库(如Jackson)来存储所有数据,然后将Jackson对象返回给客户端(Jersey可以自动将Jackson对象转换为正确的JSON格式数据)。但在我的例子中,字段的数量不是固定的。我无法创建实体类来表示结果的结构

你们有什么好办法吗

谢谢

这就是你想要的

编辑: 抱歉,刚刚回答了第一个问题,第二个问题是:只需使用结果并将其放入一个使用。然后你可以随时归还


从长远来看,更简单的方法可能是习惯Jackson或类似的东西。

对于问题的第一部分,您需要使用投影来隐藏结果中的某些字段

DBCursor cursor = coll.find(searchQuery, new BasicDBObject("_id", 0));
对于问题的第二部分,MongoDB Java驱动程序可以使用以下命令返回日期对象:

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

document.put("publish_date", dateStr);