229.6. MongoDB 작업 - 생산자 끝점
229.6.1. 쿼리 작업
229.6.1.1. findById
이 작업은 _id 필드가 IN 메시지 본문의 콘텐츠와 일치하는 컬렉션에서 하나의 요소만 검색합니다. 들어오는 오브젝트는 Bson 유형에 해당하는 모든 것일 수 있습니다. http://bsonspec.org// specification[ http://bsonspec.org//specification] 및 http://www.mongodb.org/display/DOCS/Java+Types.을 참조하십시오.
from("direct:findById")
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findById")
.to("mock:resultFindById");선택적 매개 변수를 지원합니다. 이 작업은 필드 필터 지정을 지원합니다. 선택적 매개변수 지정을 참조하십시오.
229.6.1.2. findOneByQuery
이 작업을 사용하여 MongoDB 쿼리와 일치하는 컬렉션에서 하나의 요소(첫 번째)만 검색합니다. 쿼리 오브젝트가 추출된 CamelMongoDbCriteria 헤더입니다. CamelMongoDbCriteria 헤더가 null이면 쿼리 오브젝트가 추출된 메시지 본문(예: Bson 유형 또는 Bson 으로 변환할 수 있어야 함)입니다. JSON 문자열 또는 Hashmap일 수 있습니다. 자세한 내용은 #Type 변환 을 참조하십시오. MongoDB 드라이버에서 Filters 클래스를 사용할 수 있습니다.
쿼리가 없는 예제( 컬렉션의 오브젝트를 반환함):
from("direct:findOneByQuery")
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");쿼리 사용 예(단일 일치 결과를 반환함):
from("direct:findOneByQuery")
.setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");선택적 매개 변수를 지원합니다. 이 작업은 예상 필드 및/또는 정렬 절을 지정하는 것을 지원합니다. 선택적 매개변수 지정을 참조하십시오.
229.6.1.3. findAll
findAll 작업은 쿼리와 일치하는 모든 문서를 반환하거나 전혀 없는 경우 컬렉션에 포함된 모든 문서가 반환됩니다. 쿼리 오브젝트가 추출된 CamelMongoDbCriteria 헤더입니다. CamelMongoDbCriteria 헤더가 null이면 쿼리 오브젝트가 추출된 메시지 본문(예: Bson 유형 또는 Bson 으로 변환할 수 있어야 함)입니다. JSON 문자열 또는 Hashmap일 수 있습니다. 자세한 내용은 #Type 변환 에서 참조하십시오.
쿼리가 없는 예제(컬렉션의 모든 개체를 반환함):
from("direct:findAll")
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");쿼리 사용 예(모든 일치하는 결과를 반환함):
from("direct:findAll")
.setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");다음 헤더를 통해 페이징 및 효율적인 검색이 지원됩니다.
| 헤더 키 | 빠른 일정 | description (MongoDB API doc에서 추출) | 예상 유형 |
|---|---|---|---|
|
|
| 커서가 시작될 때 지정된 수의 요소를 삭제합니다. | int/Integer |
|
|
| 반환된 요소 수를 제한합니다. | int/Integer |
|
|
| 하나의 일괄 처리에서 반환된 요소 수를 제한합니다. 커서는 일반적으로 결과 오브젝트의 배치를 가져와 로컬에 저장합니다. batchSize가 양수인 경우 검색된 각 개체의 크기를 나타냅니다. 성능을 최적화하고 데이터 전송을 제한하도록 조정할 수 있습니다. batchSize가 음수인 경우 최대 배치 크기 제한(일반적으로 4MB)에 맞는 숫자 개체가 제한되고 커서는 닫힙니다. 예를 들어 batchSize가 -10이면 서버는 최대 10개의 문서를 반환하고 4MB에 들어갈 수 있는 만큼의 문서를 반환하고 커서를 닫습니다. 이 기능은 문서가 최대 크기에 적합해야 한다는 점에서 limit()과 다르며 커서 서버 측을 닫기 위해 요청을 보낼 필요가 없습니다. 배치 크기는 커서를 반복한 후에도 변경할 수 있습니다. 이 경우 다음 배치 검색에 설정이 적용됩니다. | int/Integer |
옵션 outputType=MongoIterable 및 배치 크기가 있는 예:
from("direct:findAll")
.setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
.setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll&outputType=MongoIterable")
.to("mock:resultFindAll");
또한 findAll 작업은 다음 OUT 헤더를 반환하여 페이징을 사용하는 경우 결과 페이지를 반복할 수 있습니다.
| 헤더 키 | 빠른 일정 | description (MongoDB API doc에서 추출) | 데이터 유형 |
|---|---|---|---|
|
|
| 쿼리와 일치하는 오브젝트 수입니다. 이는 limit/skip를 고려하지 않습니다. | int/Integer |
|
|
| 쿼리와 일치하는 오브젝트 수입니다. 이는 limit/skip를 고려하지 않습니다. | int/Integer |
선택적 매개 변수를 지원합니다. 이 작업은 예상 필드 및/또는 정렬 절을 지정하는 것을 지원합니다. 선택적 매개변수 지정을 참조하십시오.
229.6.1.4. count
컬렉션의 총 개체 수를 반환하여 OUT 메시지 본문으로 long을 반환합니다.
다음 예제에서는 "dynamicCollectionName" 컬렉션의 레코드 수를 계산합니다. 동적성이 활성화되어 결과적으로 "notableScientists" 컬렉션에 대해 작업이 실행되지 않고 "dynamicCollectionName" 컬렉션에 대해 작업이 실행되지 않습니다.
// from("direct:count").to("mongodb3:myDb?database=tickets&collection=flights&operation=count&dynamicity=true");
Long result = template.requestBodyAndHeader("direct:count", "irrelevantBody", MongoDbConstants.COLLECTION, "dynamicCollectionName");
assertTrue("Result is not of type Long", result instanceof Long);
쿼리 오브젝트가 추출된 CamelMongoDbCriteria 헤더 를 제공할 수 있습니다. CamelMongoDbCriteria 헤더가 null이면 쿼리 오브젝트가 추출된 메시지 본문(즉, Bson 유형 또는 Bson 으로 변환될 수 있어야 함)이 이 기준에 일치하는 문서 양을 반환합니다.
Document query = ...
Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");229.6.1.5. 필드 필터(프로젝션) 지정
기본적으로 쿼리 작업은 일치하는 오브젝트 전체를 반환합니다(모든 필드 포함). 문서가 크고 해당 필드의 하위 집합만 검색해야 하는 경우 모든 쿼리 작업에서 필드 필터를 지정할 수 있습니다. 즉, 관련 (또는 JSON 문자열, 맵 등)으로 변환할 수 있습니다(또는 Bson CamelMongoDbFieldsProjection 헤더, 상수 바로 가 기: MongoDbConstants.F IDS).
다음은 Bson의 생성을 단순화하기 위해 MongoDB의 프로젝트 를 사용하는 예입니다. _id 및ted Field를 제외한 모든 필드를 검색합니다.
// route: from("direct:findAll").to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
Bson fieldProjection = Projection.exclude("_id", "boringField");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);
다음은 Bson의 생성을 단순화하기 위해 MongoDB의 프로젝트 를 사용하는 예입니다. _id 및ted Field를 제외한 모든 필드를 검색합니다.
// route: from("direct:findAll").to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
Bson fieldProjection = Projection.exclude("_id", "boringField");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);229.6.1.6. 정렬 절 지정
MongoDB의 Sorts 를 사용하여 Bson 생성을 단순화하는 특정 필드의 정렬을 기반으로 컬렉션에서 min/max 레코드를 가져와야 하는 경우가 많습니다. _id 및ted Field를 제외한 모든 필드를 검색합니다.
// route: from("direct:findAll").to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
Bson sorts = Sorts.descending("_id");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.SORT_BY, sorts);
Camel 경로에서 SORT_BY 헤더를 findOneByQuery 작업과 함께 사용하여 동일한 결과를 얻을 수 있습니다. FIELDS_PROJECTION 헤더도 지정되면 작업은 다른 구성 요소(예: 매개 변수가 있는 MyBatis SELECT 쿼리)로 직접 전달할 수 있는 단일 필드/값 쌍을 반환합니다. 이 예제에서는 documentTimestamp 필드를 기반으로 한 컬렉션에서 임시 문서를 가져와서 결과를 단일 필드로 줄이는 방법을 보여줍니다.
.from("direct:someTriggeringEvent")
.setHeader(MongoDbConstants.SORT_BY).constant(Sorts.descending("documentTimestamp"))
.setHeader(MongoDbConstants.FIELDS_PROJECTION).constant(Projection.include("documentTimestamp"))
.setBody().constant("{}")
.to("mongodb3:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery")
.to("direct:aMyBatisParameterizedSelect")
;