복붙노트

[MONGODB] 날짜 별 자바 / MongoDB의 쿼리

MONGODB

날짜 별 자바 / MongoDB의 쿼리

나는 내 컬렉션에서 java.util.Date ()와 같은 값을 저장하지만 두 가지 특정 날짜 사이의 값을 얻기 위해 쿼리 할 때, 나는 범위를 벗어나는 값을 받고 결국. 여기 내 코드는 :

인서트

BasicDBObject object = new BasicDBObject();
...
object.put("dateAdded", new java.util.Date());
collection.insert(object);

쿼리

BasicDBObject query = new BasicDBObject();
query.put("dateAdded", new BasicDBObject("$gte", fromDate));
query.put("dateAdded", new BasicDBObject("$lte", toDate));
collection.find(query).sort(new BasicDBObject("dateAdded", -1));

때를 쿼리 수요일 2011년 7월 27 동부 표준시 16시 54분 49초과 수요일 2011년 7월 27 16시 54분 49초 (동부 표준시) 사이에 (기본적으로 FROMDATE = TODATE), 내가 화 7월 같은 날짜와 객체 (26) 9시 43분 37초 동부 표준시 20시 11분를 얻을 수있는해야 확실히 할 수 없습니다. 내가 무슨 말이냐?

해결법

  1. ==============================

    1.키 덮어 쓰기에 $ GTE 연산자를 잃고 : {TODATE $ LTE} 무슨 일을하는지 만에 쿼리입니다. 당신이 원하는 것은 :

    키 덮어 쓰기에 $ GTE 연산자를 잃고 : {TODATE $ LTE} 무슨 일을하는지 만에 쿼리입니다. 당신이 원하는 것은 :

    query.put("dateAdded", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());
    
  2. ==============================

    2.몽고 클라이언트 3.0을 사용하여

    몽고 클라이언트 3.0을 사용하여

    DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.ENGLISH);
    Bson filter = new Document("$gte", format.parse("2015-05-01T00:00:00Z")).append("$lt", format.parse("2015-05-02T00:00:00Z"));
    long count = db.getCollection("colection").count(new Document("field",filter) );
    
  3. ==============================

    3.당신이 봄 - 데이터 MongoDB를의 MongoTemplate를 사용하는 경우, 당신은 방법을 다음에 같은 작업을 수행 할 수 있습니다 -

    당신이 봄 - 데이터 MongoDB를의 MongoTemplate를 사용하는 경우, 당신은 방법을 다음에 같은 작업을 수행 할 수 있습니다 -

    public List<Link> getLinksBetweenDate(Date startDate, Date endDate) {
                Query query = new Query().addCriteria(Criteria.where("updatedOn").gt(startDate).lte(endDate));
                return mongoTemplate.find(query, Link.class);
            }
    
  4. ==============================

    4.단계에 따라 특정 형식과 날짜를 검색되는 몽고 3.0에서이 또한 작업

    단계에 따라 특정 형식과 날짜를 검색되는 몽고 3.0에서이 또한 작업

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy.MM.dd");
    

    먼저 특정 형식으로 날짜를 변환, 당신은 어떤 형식을 사용하고 위의 형식으로 날짜를 구문 분석하고 쿼리에 전달할 수 있습니다.

    String date ="2014.01.02"; 
    String data1 ="2014.01.10";
    Date startDate = simpleDateFormat.parse(date);  
    Date endDate = simpleDateFormat.parse(date1);
    
    BasicDBObject query = new BasicDBObject("fieldName",
       new BasicDBObject("$gte",startDate).append("$lt",endDate ));
    

    귀하의 요구 사항에 기반 그래서 당신은 BasicDBobject에 인수를 제공하여 날짜를 검색 할 수 있습니다.

  5. from https://stackoverflow.com/questions/6840540/java-mongodb-query-by-date by cc-by-sa and MIT license