如何对两个字段的总和进行匹配

时间:2013-11-10 18:50:16

标签: java mongodb

我在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);

1 个答案:

答案 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")}}}
] );