关于MongoDB命令转java实现:使用mongodb-driver.jar驱动
db.test.aggregate(
[
{
$project:
{
dt:
{
$dateToString:
{
format: "%Y-%m-%d %H:%M:%S:%L", date:{"$add":[new Date(0),"$time",28800000]}
}
}
}
},
{
$group:
{
_id:"$dt"
}
}
]
);
请问上述命令使用java该怎么实现?
我尝试使用:
DBCollection coll = getDBCollection(dbName,collectionName);
List<DBObject> pipeline = new ArrayList<>();
String projectStr = "{$project:{dt:{$dateToString: {format: '%Y-%m-%d %H:%M:%S:%L', date:{'$add':[new Date(0),'$ti',28800000]}}}}";
DBObject project = (DBObject) com.mongodb.util.JSON.parse(projectStr);
pipeline.add(project);
String groupStr = "{$group:{_id:'$ti'}}";
DBObject group = (DBObject) com.mongodb.util.JSON.parse(groupStr);
pipeline.add(group);
AggregationOutput out = coll.aggregate(pipeline);
System.out.println(out.results());
但是projectStr不能转成DBObject。后来又尝试使用
Document sub_project = new Document();
sub_project.put("dt", "{$dateToString:{format:'%Y-%m-%d %H',date:{$add:[new Date(0),'$ti',28800000]}}}");
Document project = new Document("$project", sub_project);
Document sub_group = new Document();
sub_group.put("_id", "$dt");
Document group = new Document("$group", sub_group);
List<Document> aggregateList = new ArrayList<Document>();
aggregateList.add(project);
aggregateList.add(group);
JSONObject ret_obj = new JSONObject();
AggregateIterable<Document> resultset = collection.aggregate(aggregateList);
while(cursor.hasNext()) {
Document item_doc = cursor.next();
System.out.println(">>>>>"+item_doc);
}
结果输出的内容是:
>>>>>{_id={$dateToString:{format:'%Y-%m-%d %H',date:{$add:[new Date(0),'$ti',28800000]}}}}}
请问到底该怎么实现?