mongodb $sample java實現隨機取樣
阿新 • • 發佈:2018-12-24
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); } } }