programing

날짜별 Java/MongoDB 쿼리

lovejava 2023. 5. 4. 17:52

날짜별 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