mongo查询
db.flightAttendance.aggregate([
{$match: { "departureDate" :{"$gte": ISODate("2018-02-13T16:00:00.000Z"),"$lte": ISODate("2018-02-16T16:00:00.000Z")}}},
{$match: { "guestRate" :{"$gte": 60,"$lte": 80}}},
{ $sample: { size: 20 }}
])java查询语句
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.ceair.pss.attendance.bean.FlightAttendanceSimple;
import com.ceair.pss.attendance.util.Utils;
import com.mongodb.AggregationOutput;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { //
"classpath*:spring/*.xml"//
})
public class SampleTest {
@Autowired
protected MongoTemplate mongoTemplateTest;// 测试库
private static SimpleDateFormat sdf_yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
@Test
public void test_sample() throws ParseException {
Date date = sdf_yyyyMMdd.parse(sdf_yyyyMMdd.format(new Date()));// 当天
Date dateAfter = Utils.getDay(date, 1);// 最近3天
// match
BasicDBObject[] arrayDate = { new BasicDBObject("departureDate", new BasicDBObject("$gte", date)),
new BasicDBObject("departureDate", new BasicDBObject("$lt", dateAfter)) };
BasicDBObject condDate = new BasicDBObject();
condDate.put("$and", arrayDate);
BasicDBObject[] arrayRate = { new BasicDBObject("guestRate", new BasicDBObject("$gt", 90)),
new BasicDBObject("guestRate", new BasicDBObject("$lte", 91)) };
BasicDBObject condRate = new BasicDBObject();
condRate.put("$and", arrayRate);
DBObject matchDate = new BasicDBObject("$match", condDate);
DBObject matchRate = new BasicDBObject("$match", condRate);
// sample
DBObject sample = new BasicDBObject("$sample", new BasicDBObject("size", 20));
AggregationOutput output = mongoTemplateTest.getCollection("flightAttendance").aggregate(matchDate, matchRate, sample);
Iterable<DBObject> list = output.results();
List<FlightAttendanceSimple> flightAttendanceSimples = new ArrayList<FlightAttendanceSimple>();
for (DBObject dbObject : list) {
FlightAttendanceSimple flightAttendanceSimple = new FlightAttendanceSimple();
flightAttendanceSimple.setArrivalAirPort(String.valueOf(dbObject.get("arrivalAirPort")));
flightAttendanceSimple.setDepartureAirPort(String.valueOf(dbObject.get("departureAirPort")));
String departureDate = sdf_yyyyMMdd.format((Date) dbObject.get("departureDate"));
if (StringUtils.isNotBlank(departureDate)) {
flightAttendanceSimple.setDepartureDate(departureDate.substring(5));
}
flightAttendanceSimple.setGuestRate(String.valueOf(dbObject.get("guestRate")) + "%");
flightAttendanceSimple.setOpCarrier(String.valueOf(dbObject.get("opCarrier")));
flightAttendanceSimple.setOpFlightNumber(String.valueOf(dbObject.get("opFlightNumber")));
flightAttendanceSimples.add(flightAttendanceSimple);
System.out.println(flightAttendanceSimple);
}
}
}
本文展示了一个使用MongoDB进行复杂聚合查询的例子,包括日期范围匹配、百分比筛选及随机样本抽取等操作,并提供了对应的Java实现方式。
847

被折叠的 条评论
为什么被折叠?



