我在MySQL中有一个包含以下条件的查询:
WHERE START_TIME < ? AND START_TIME+DURATION >= ?
我应该如何使用Java驱动程序和聚合框架将其迁移到MongoDB? 第一个条件将成为:
DBObject match = new BasicDBObject("$match", new BasicDBObject("start_time", "{ $lt : "+timestamp+"}") );
但我不确定第二个。 感谢。
修改
我试过和Asya Kamsky一起回答,这就是我得到的但是它不起作用:
BasicDBList dbList = new BasicDBList();
dbList.add("$start_time");
dbList.add("$duration");
DBObject matchLT = new BasicDBObject("$match", new BasicDBObject("start_time", new BasicDBObject("$lt",timestamp)));
DBObject project = new BasicDBObject("$project", new BasicDBObject("end_time", new BasicDBObject("$add", dbList)));
DBObject matchGTE = new BasicDBObject("$match", new BasicDBObject("end_time", new BasicDBObject("$gte",timestamp)));
//GROUP CODE GOES HERE
AggregationOutput output = collection.aggregate(matchLT, project, matchGTE, group);
答案 0 :(得分:1)
以下是您在Aggregation Framework中的使用方法,我相信您可以将其转换为Java:
db.collection.aggregate([ {$match: {start_time:{$lt:ISODate("xxxx-xx-xx")}}},
{$project:{end_time:{$add:["$start_time","$duration"]}}},
{$match:{end_time:{$gt:ISODate("yyyy-yy-yy")}}}
] );