2017-11-27 8 views
0

사용자가 데이터를 업로드 할 수있는 제품을 작업하고 있으며 업로드하는 동안 데이터의 데이터 유형이 동적으로 선택됩니다. 나는 mongodb에 데이터를 저장하고있다. 사용자는 프런트 엔드에 규칙을 작성하여 데이터를 분류 할 수 있습니다. 요구 사항 중 하나는, 생년월일이 오늘 인 모든 기록을 찾는 규칙을 부여 할 수 있다는 것입니다. 이를 위해 & 일까지 문서를 필터링해야 할 수도 있습니다. 현재로서는 사용자가 지정한 규칙에 따라 동적으로 BasicDBObject로 mongo 질의 (java)를 구현하고 있습니다.MongoDB : 오늘 집계되지 않은 생년월일까지 데이터 찾기/필터링

필터는 $ date.month = 12 & & $ date.day = 10 (12 월 10 일의 생년월일이되는 모든 기록을 가져 오기 위해)과 같이 수행되어야합니다.

Mongo 쿼리에서 어떻게 달성 할 수 있습니까?

+0

가능한 복제 (https://stackoverflow.com/questions/18907566/mongodb-query-specific-monthyear-not-date) 나는이 달성하고자하는 해달라고 – dnickless

+0

집합으로. 실제 프로세스 Im은 모든 문서를 가져 와서 필터와 예측을 적용하여 반복합니다. 메신저를 사용하지 않습니다. – Preetham

답변

0

문서를 반복하는 방법입니다. 여기에는 어떤 집계도 없습니다.

MongoCollection<Document> mongoCollection = mongoDatabase.getCollection(collectionName); 
    FindIterable<Document> iterable; 
    iterable = (ruleQuery == null) ? mongoCollection.find().limit(limit).skip(skipCount) : mongoCollection.find(ruleQuery).limit(limit).skip(skipCount); 
    iterable = (projectionFieldsQuery == null) ? iterable : iterable.projection(projectionFieldsQuery); 
    iterable = (sortQuery == null) ? iterable : iterable.sort(sortQuery); 
    return iterable.iterator(); 
0

집계 프레임 워크 사용에는 아무런 문제가 없습니다. 어쨌든 모든 쿼리의 기본값이 될 것입니다. 적어도 내부적으로는 ...

그럼에도 불구하고 데이트 연산자가 없으므로 세 가지 옵션이 있습니다. "정상"쿼리 :

  1. 당신은 매우 효율적으로하지 않습니다 연산자 $ 사용하려고 시도 할 수 있습니다 : 당신은 개별 필드에 (아마도 추가) 날짜 부분의 정보를 저장할 수 https://docs.mongodb.com/manual/reference/operator/query/where/
  2. 를 간단하게 사용 귀하의 질문에. 이 필드는 인덱싱 될 수 있으므로 이렇게 빠릅니다.
  3. 날짜는 Unix 타임 스탬프로 MongoDB (https://docs.mongodb.com/manual/reference/method/Date/)에 저장됩니다. 따라서 관련 숫자 또는 범위를 계산하고 긴 값 (들)을 사용하여 액세스 할 수 있습니다.
[MongoDB의 쿼리 특정 달 | 년되지 날짜]의