JavaでMongoDBに接続してみた

MongoDBはQueryがちょっと特殊です。

http://gihyo.jp/dev/serial/01/mongodb/0003?page=2

この辺りを参考に。。

データにISODate型で入っているものに対してwhere句はこんなかんじ

> db.search_engine.find({time:{$gte:ISODate("2013-04-12T04:10:30Z"),$lt:ISODate("2013-04-12T04:32:50Z")}},{time:1}).sort({time:1})
{ "_id" : ObjectId("5167893f7cbb48516f000013"), "time" : ISODate("2013-04-12T04:10:30Z") }
{ "_id" : ObjectId("5167893f7cbb48516f000014"), "time" : ISODate("2013-04-12T04:10:31Z") }
{ "_id" : ObjectId("5167893f7cbb48516f000015"), "time" : ISODate("2013-04-12T04:10:33Z") }
{ "_id" : ObjectId("5167893f7cbb48516f000016"), "time" : ISODate("2013-04-12T04:10:34Z") }
{ "_id" : ObjectId("51678caf7cbb48516f00002f"), "time" : ISODate("2013-04-12T04:25:07Z") }
{ "_id" : ObjectId("51678caf7cbb48516f000030"), "time" : ISODate("2013-04-12T04:25:07Z") }
{ "_id" : ObjectId("51678caf7cbb48516f000031"), "time" : ISODate("2013-04-12T04:25:08Z") }
{ "_id" : ObjectId("51678caf7cbb48516f000032"), "time" : ISODate("2013-04-12T04:25:08Z") }
{ "_id" : ObjectId("51678e687cbb48516f000049"), "time" : ISODate("2013-04-12T04:32:34Z") }
{ "_id" : ObjectId("51678e687cbb48516f00004a"), "time" : ISODate("2013-04-12T04:32:34Z") }
> 

これをJavaから接続するにはちょっと悩みました

http://www.mkyong.com/mongodb/java-mongodb-query-document/

http://stackoverflow.com/questions/9091155/mongo-isodate-query-in-java

この辺りを参考に

	SimpleDateFormat df=new SimpleDateFormat("yyyyMMdd");
	Date fromDate=df.format("20130412");
	Date toDate=df.format("20130413");
	String host="hostname";
	int port=11111;
	MongoClient mon=new MongoClient(new ServerAddress(host,port));
	DB db=mon.getDB("dbName");
	DBCollection coll=db.getCollection("collection");
	BasicDBObject query=new BasicDBObject();
	query.put("time",new BasicDBObject("$gte",fromDate).append("$lte",toDate));
	DBCursor cur=coll.find(query);
	while(cur.hasNext()){
		DBObject o=cur.next();
	
	}

ポイントはJavaのDateクラスがそのまま用いることができるとのこと。

結構悩みました。。