2012-04-25 10 views
23

스프링 데이터 mongodb를 사용합니다.스프링 데이터 MongoDB 날짜 사이

두 날짜 사이에 레코드가 필요합니다. 다음 MongoDB의 쿼리가 작동합니다

db.posts.find({startDate: {$gte: start, $lt: end}}); 

내 시도 봄 데이터 쿼리 오브젝트 코드 변환이 작동하지 않습니다

Query query = new Query(); 
query.addCriteria(Criteria.where("startDate").gte(startDate) 
          .and("startDate").lt(endDate)); 

방법의 올바른 순서는 내가 필요로하는 몽고의 쿼리를 작성하기 위해 호출입니까?

+0

filedName (예 : startDate)을 두 번 이상 넣으면 ** InvalidMongoDbApiUsageException **가 발생합니다. 두 번째를 추가 할 수 없습니다 'startDate'... – Hamedz

답변

3

이 당신이 GTE와 LTE 매개 변수를 모두 "의 startDate"이 기록을 위해, 자바 드라이버 또한

DBCollection coll = db.getCollection("posts"); 

BasicDBObject date = new BasicDBObject(); 
date.append("$gte", new Date(startDate)); 
date.append("$lte", new Date(endDate)); 

DBObject query = new BasicDBObject(); 
query.put("date", date); 

DBCursor cursor = coll.find(query); 

버전 2.7.2에서 작동합니다.

+0

감사합니다. 좋은 예입니다. – ujava

42

'및 ("startDate") 부분을 조건에 포함하지 마십시오.

대신에 :

query.addCriteria(Criteria.where("startDate").gte(startDate).and("startDate").lt(endDate)); 

당신은 사용해야합니다

query.addCriteria(Criteria.where("startDate").gte(startDate).lt(endDate)); 

당신이 '와 ("의 startDate")'부분을 포함하는 경우, 몽고는 동일한 속성에 서로 다른 두 가지 항목으로의 참조 .

그것은 작동
+2

이것은 완전히 정답이며 정확하다고 표시해야합니다. –

+1

"startDate"및 "endDate"는 java.util.Date 객체이며 "startDate"와 같은 mongodb 쿼리를 생성합니다. { "$ gte": { "$ date": "2014-09-01T07 : 00 : 00.000Z "},"$ lt ": {"$ date ":"2014-10-01T07 : 00 : 00.000Z "}}} – java25

+0

query.addCriteria (Criteria.where ("dob ") .gte (startDate) .lt (endDate)); 내 경우 엔 효과가 없었어. 내가 db와 같은 db 객체를 찾는 데 사용해야하는 것 : "dob": ISODate ("1991-01-22T18 : 30 : 00Z"), –

0

, 그는 몇 가지 예제 코드입니다 :

Criteria criteria = Criteria.where("pt").gte(startDate) 
     .andOperator(Criteria.where("pt").lt(endDate)); 
+0

dob를 검색하고 싶습니다. 그러나 나는 어떤 사용자도 찾을 수 없었다. 그들의 200 데이터베이스 사용자입니다. criteria = Criteria.where ("dob"). lt (startDate.getTime()). gte (endDate.getTime()); –

1

I 필드 publishedDate에 사이의 날짜를 찾을 수 있었고, 여기에 내가했던 방법입니다

Criteria publishedDateCriteria = Criteria 
         .where("publishedDateObject").gte(psDate) 
         .lte(peDate); 
    Query query = new Query(publishedDateCriteria); 
    mongoTemplate.find(query, 
         MyDocumentObject.class)); 
+1

제임스 감사합니다, 정말 도움이됩니다. –

+0

@ user3327951, 잘 알고 있습니다. :) 고맙습니다. –

2

Reference here

Query query = new Query(
    Criteria.where("ip").is(ip) 
    .andOperator(
    Criteria.where("createdDate").lt(endDate), 
    Criteria.where("createdDate").gte(startDate) 
) 
); 
관련 문제