날짜별 Java/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));
사이에 의문을 품을Wed Jul 27 16:54:49 EST 2011
그리고.Wed Jul 27 16:54:49 EST 2011
(Date =에서 Date로 이동), 다음과 같은 날짜를 가진 개체를 가져옵니다.Tue Jul 26 09:43:37 EST 2011
절대로 가능하지 않을 겁니다내가 여기서 뭘 놓쳤지요?
당신이 하고 있는 것은 오직 당신이 하는 것입니다.{$lte: toDate}
잃기$gte
키 덮어쓰기의 연산자입니다.원하는 것은 다음과 같습니다.
query.put("dateAdded", BasicDBObjectBuilder.start("$gte", fromDate).add("$lte", toDate).get());
Spring-Data 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);
}
mongo 클라이언트 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) );
특정 형식의 검색 날짜 다음 단계는 mongo 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
.
할수있습니다
import org.bson.conversions.Bson;
import static com.mongodb.client.model.Filters.*;
import java.text.SimpleDateFormat;
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Bson filter = Filters.and(gte("date_field", format.parse("2018-10-01")),
lt("date_field", format.parse("2019-10-01")))
나는 질문에 이렇게 접근합니다.
new Document("datetime",Document.parse(
"{$gte: ISODate('" + new SimpleDateFormat("yyyy-MM-dd").format(fromDate) + "'),
$lte: ISODate('" + new SimpleDateFormat("yyyy-MM-dd").format(endDate) + "')}"
))
날짜 범위를 적용할 때 정확한 답변으로 한 가지 작업을 더 수행하려면 UTC 시간을 동일하게 사용합니다.
로컬 컴퓨터에서 다음 코드를 사용하여 컴퓨터 또는 서버에서 UTC 시간을 찾을 수 있습니다.
java.util.TimeZone.setDefault(java.util.TimeZone.getTimeZone("UTC"));
언급URL : https://stackoverflow.com/questions/6840540/java-mongodb-query-by-date
'programing' 카테고리의 다른 글
작은 테이블에서 중복 행 삭제 (0) | 2023.05.09 |
---|---|
.gitignore를 사용하지 않고 추적되지 않은 파일이 표시되지 않도록 'git status'를 어떻게 해야 합니까? (0) | 2023.05.04 |
UIScene에서 탈퇴 선택(위임자/스위프트)iOS의 UI (0) | 2023.05.04 |
MongoDB 셸에서 실행 중인 쿼리를 중단하려면 어떻게 해야 합니까? (0) | 2023.05.04 |
Angular를 사용하는 이유JS 선택에 빈 옵션이 포함되어 있습니까? (0) | 2023.05.04 |