45.7. MongoDB 작업 - 생산자 끝점
45.7.1. 쿼리 작업 링크 복사링크가 클립보드에 복사되었습니다!
45.7.1.1. findById 링크 복사링크가 클립보드에 복사되었습니다!
이 작업은 _id 필드가 IN 메시지 본문의 콘텐츠와 일치하는 컬렉션에서 하나의 요소만 검색합니다. 들어오는 오브젝트는 Bson 유형과 동등한 모든 개체일 수 있습니다. http://bsonspec.org/spec.html 및 http://www.mongodb.org/display/DOCS/Java+Types 를 참조하십시오.
from("direct:findById")
.to("mongodb:myDb?database=flights&collection=tickets&operation=findById")
.to("mock:resultFindById");
from("direct:findById")
.to("mongodb:myDb?database=flights&collection=tickets&operation=findById")
.to("mock:resultFindById");
기본 _id는 Mongo에서 및 ObjectId 유형으로 처리되므로 적절하게 변환해야 할 수 있습니다.
from("direct:findById")
.convertBodyTo(ObjectId.class)
.to("mongodb:myDb?database=flights&collection=tickets&operation=findById")
.to("mock:resultFindById");
from("direct:findById")
.convertBodyTo(ObjectId.class)
.to("mongodb:myDb?database=flights&collection=tickets&operation=findById")
.to("mock:resultFindById");
선택적 매개 변수를 지원합니다
이 작업은 프로젝션 연산자를 지원합니다. 필드 필터 지정 (프로젝트)을 참조하십시오.
45.7.1.2. findOneByQuery 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB 쿼리 선택기와 일치하는 컬렉션에서 첫 번째 요소를 검색합니다. CamelMongoDbCriteria 헤더가 설정된 경우 해당 값은 쿼리 선택기로 사용됩니다. CamelMongoDbCriteria 헤더가 null 인 경우 IN 메시지 본문이 쿼리 선택기로 사용됩니다. 두 경우 모두 쿼리 선택기는 Bson 또는 Bson (예: JSON 문자열 또는 HashMap) 형식으로 변환 할 수 있어야합니다. 자세한 내용은 유형 변환에서 참조하십시오.
MongoDB 드라이버에서 제공하는 필터를 사용하여 쿼리 선택기를 생성합니다.
45.7.1.3. 쿼리 선택기가 없는 예(컬렉션에서 첫 번째 문서 반환) 링크 복사링크가 클립보드에 복사되었습니다!
from("direct:findOneByQuery")
.to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");
from("direct:findOneByQuery")
.to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");
45.7.1.4. 쿼리 선택기가 있는 예(컬렉션에서 첫 번째 일치 문서 반환): 링크 복사링크가 클립보드에 복사되었습니다!
from("direct:findOneByQuery")
.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani")))
.to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");
from("direct:findOneByQuery")
.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani")))
.to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");
선택적 매개 변수
이 작업은 프로젝션 연산자 및 정렬 절을 지원합니다. sort 절 지정, 필드 필터 지정(프로젝트) 을 참조하십시오.
45.7.1.5. findAll 링크 복사링크가 클립보드에 복사되었습니다!
findAll 작업은 쿼리와 일치하는 모든 문서 또는 전혀 없는 문서를 반환합니다. 이 경우 컬렉션에 포함된 모든 문서가 반환됩니다. 쿼리 오브젝트는 추출된 CamelMongoDbCriteria 헤더 입니다. CamelMongoDbCriteria 헤더가 null인 경우 쿼리 오브젝트가 추출된 메시지 본문입니다. 즉, Bson 유형 Bson 또는 Bson으로 변환할 수 있어야 합니다. JSON 문자열 또는 Hashmap이 될 수 있습니다. 자세한 내용은 유형 변환에서 참조하십시오.
45.7.1.5.1. 쿼리 선택기가 없는 예(컬렉션의 모든 문서 반환) 링크 복사링크가 클립보드에 복사되었습니다!
from("direct:findAll")
.to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");
from("direct:findAll")
.to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");
45.7.1.5.2. 쿼리 선택기의 예 (컬렉션에서 일치하는 모든 문서 반환) 링크 복사링크가 클립보드에 복사되었습니다!
from("direct:findAll")
.setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
.to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");
from("direct:findAll")
.setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
.to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");
페이징 및 효율적인 검색은 다음 헤더를 통해 지원됩니다.
| 헤더 키 | 빠른 상수 | 설명 (MongoDB API doc에서 추출) | 예상 유형 |
|---|---|---|---|
|
|
| 커서가 시작될 때 지정된 수의 요소를 삭제합니다. | int/Integer |
|
|
| 반환된 요소 수를 제한합니다. | int/Integer |
|
|
| 하나의 일괄 처리에서 반환된 요소 수를 제한합니다. 일반적으로 커서는 결과 오브젝트의 일괄을 가져와서 로컬에 저장합니다. batchSize가 양수인 경우 검색된 오브젝트의 각 배치 크기를 나타냅니다. 성능을 최적화하고 데이터 전송을 제한하도록 조정할 수 있습니다. batchSize가 음수이면 최대 일괄 처리 크기 제한(일반적으로 4MB) 내에 반환되는 수 오브젝트를 제한하고 커서가 종료됩니다. 예를 들어 batchSize가 -10인 경우 서버는 최대 10개의 문서를 반환하고 4MB에 들어갈 수 있는 문서 수를 반환한 다음 커서를 종료합니다. 이 기능은 문서의 limit()이 최대 크기 내에 들어 있어야 하며 커서 서버 측을 종료하기 위해 요청을 보낼 필요가 없다는 점에 유의하십시오. 커서를 반복한 후 배치 크기를 변경할 수 있으며, 이 경우 다음 배치 검색에 설정이 적용됩니다. | int/Integer |
|
|
| allowDiskUse MongoDB 플래그를 설정합니다. MongoDB Server 4.3.1부터 지원됩니다. 이전 MongoDB Server 버전과 함께 이 헤더를 사용하면 쿼리가 실패할 수 있습니다. | 부울/부울 |
45.7.1.5.3. 옵션 outputType=MongoIterable 및 배치 크기의 예 링크 복사링크가 클립보드에 복사되었습니다!
from("direct:findAll")
.setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani")))
.to("mongodb:myDb?database=flights&collection=tickets&operation=findAll&outputType=MongoIterable")
.to("mock:resultFindAll");
from("direct:findAll")
.setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
.setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani")))
.to("mongodb:myDb?database=flights&collection=tickets&operation=findAll&outputType=MongoIterable")
.to("mock:resultFindAll");
또한 findAll 작업은 페이징을 사용하는 경우 결과 페이지를 반복할 수 있도록 다음 OUT 헤더를 반환합니다.
| 헤더 키 | 빠른 상수 | 설명 (MongoDB API doc에서 추출) | 데이터 유형 |
|---|---|---|---|
|
|
| 쿼리와 일치하는 오브젝트 수입니다. 이 경우 limit/skip이 고려되지 않습니다. | int/Integer |
|
|
| 쿼리와 일치하는 오브젝트 수입니다. 이 경우 limit/skip이 고려되지 않습니다. | int/Integer |
선택적 매개 변수
이 작업은 프로젝션 연산자 및 정렬 절을 지원합니다. sort 절 지정, 필드 필터 지정(프로젝트) 을 참조하십시오.
45.7.1.6. count 링크 복사링크가 클립보드에 복사되었습니다!
컬렉션의 총 오브젝트 수를 반환하고 OUT 메시지 본문으로 Long을 반환합니다.
다음 예제에서는 "dynamicImagePrepareName" 컬렉션의 레코드 수를 계산합니다. dynamicity가 활성화되는 방식을 확인하고 그 결과 "notableScientists" collection에 대해 작업이 실행되지 않지만 "dynamic>-<Name" 컬렉션에 대해 실행됩니다.
// from("direct:count").to("mongodb: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);
// from("direct:count").to("mongodb: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");
Document query = ...
Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");
45.7.1.7. 필드 필터 지정(프로젝트) 링크 복사링크가 클립보드에 복사되었습니다!
쿼리 작업은 기본적으로 일치하는 오브젝트 전체(모든 필드 포함)를 반환합니다. 문서가 크고 필드의 하위 집합만 검색해야 하는 경우, 모든 쿼리 작업에서 필드 필터를 지정해야 합니다. 단순히 관련 Bson (또는 유형 convertible을 Bson 으로 설정(예: JSON String, Map 등)으로 설정할 수 있습니다(예: CamelMongoDbFieldsProjection 헤더: MongoDbConstants.FIELDS_PROJECTION ).
다음은 MongoDB 의 프로젝션 을 사용하여 Bson 생성을 단순화하는 예입니다. _id 및 modern Field를 제외한 모든 필드를 검색합니다.
// route: from("direct:findAll").to("mongodb: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);
// route: from("direct:findAll").to("mongodb: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);
다음은 MongoDB 의 프로젝션 을 사용하여 Bson 생성을 단순화하는 예입니다. _id 및 modern Field를 제외한 모든 필드를 검색합니다.
// route: from("direct:findAll").to("mongodb: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);
// route: from("direct:findAll").to("mongodb: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);
45.7.1.8. sort 절 지정 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB의 정렬을 사용하여 Bson 생성을 단순화하는 특정 필드를 기준으로 컬렉션에서 min/max 레코드를 가져와야 하는 경우가 많습니다. _id 및 modern Field를 제외한 모든 필드를 검색합니다.
// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
Bson sorts = Sorts.descending("_id");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.SORT_BY, sorts);
// route: from("direct:findAll").to("mongodb: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 헤더도 지정된 경우 작업은 다른 구성 요소로 직접 전달할 수 있는 단일 필드/값 쌍을 반환합니다(예: 매개 변수화된 MyBatisLoadBalancer 쿼리). 이 예제에서는 컬렉션에서 일시적인 최신 문서를 가져와서 documentTimestamp 필드를 기반으로 결과를 단일 필드로 줄이는 방법을 보여줍니다.
45.7.2. create/update 작업 링크 복사링크가 클립보드에 복사되었습니다!
45.7.2.1. insert 링크 복사링크가 클립보드에 복사되었습니다!
IN 메시지 본문에서 가져온 MongoDB 컬렉션에 새 오브젝트를 삽입합니다. 유형 변환은 문서 또는 목록으로 변환하려고 합니다.
두 가지 모드가 지원됩니다. 단일 삽입과 여러 삽입이 지원됩니다. 여러 삽입의 경우 끝점은 모든 유형의 개체 목록, 배열 또는 컬렉션을 예상할 수 있으며 문서 형식으로 변환할 수 있습니다.For multiple insert, the endpoint will expect a List, Array or Collections of objects of any type, as long as they are - or can be converted to - Document. 예제:
from("direct:insert")
.to("mongodb:myDb?database=flights&collection=tickets&operation=insert");
from("direct:insert")
.to("mongodb:myDb?database=flights&collection=tickets&operation=insert");
이 작업은 WriteResult를 반환하고 WriteConcern 또는 invokeGetLastError 옵션의 값에 따라 getLastError() 가 이미 호출되었거나 없는 것입니다. 쓰기 작업의 최종 결과에 액세스하려면 WriteResult 에서 getLastError() 또는 getCachedLastError() 를 호출하여 CommandResult 를 검색해야 합니다. 그러면 CommandResult.ok(), CommandResult.getErrorMessage() 및/또는 CommandResult.getException() 을 호출하여 결과를 확인할 수 있습니다.
새 개체의 _id 는 컬렉션에서 고유해야 합니다. 값을 지정하지 않으면 MongoDB에서 자동으로 값을 생성합니다. 그러나 지정하지 않고 고유하지 않으면 삽입 작업이 실패합니다(및 Camel에서 알아두려면 invokeGetLastError를 활성화하거나 쓰기 결과를 기다리는 WriteConcern을 설정해야 합니다).
이는 구성 요소의 제한 사항은 아니지만 더 높은 처리량을 위해 MongoDB에서 작동하는 방법입니다. 사용자 지정 _id 를 사용하는 경우 애플리케이션 수준에서 고유한 애플리케이션 수준을 확인해야 합니다.
삽입된 레코드의 OID는 CamelMongoOid 키(MongoDbConstants.OID 상수) 아래의 메시지 헤더에 저장됩니다. 저장된 값은 단일 삽입의 경우 org.bson.types.ObjectId 로, 여러 레코드가 삽입된 경우 java.util.List<org.bson.types.ObjectId >입니다.
MongoDB Java Driver 3.x에서 insertOne 및 insertMany 작업 반환 void입니다. Camel 삽입 작업에서는 문서 또는 문서 목록 삽입을 반환합니다. 필요한 경우 각 문서가 새 OID에 의해 업데이트됩니다.
45.7.2.2. 저장 링크 복사링크가 클립보드에 복사되었습니다!
저장 작업은 upsert (UPdate, inSERT) 작업과 동일합니다. 여기서 레코드가 업데이트되고 존재하지 않으면 단일 원자 작업으로 삽입됩니다. MongoDB는 _id 필드를 기반으로 일치를 수행합니다.
업데이트의 경우 오브젝트가 전체적으로 교체되고 MongoDB의 $modifiers 사용은 허용되지 않습니다. 따라서 개체가 이미 존재하는 경우 다음 두 가지 옵션이 있습니다.
- 쿼리를 수행하여 모든 필드(효율적이지 않을 수 없음)와 함께 전체 오브젝트를 검색하고 Camel 내부에서 변경한 후 저장합니다.
- 대신 서버 측에서 업데이트를 실행할 $modifiers 와 함께 업데이트 작업을 사용합니다. upsert 플래그를 활성화할 수 있습니다. 이 경우 삽입이 필요한 경우 MongoDB는 $modifiers를 filter 쿼리 오브젝트에 적용하여 결과를 삽입합니다.
저장할 문서에 _id 속성이 포함되어 있지 않으면 작업이 삽입되고 생성된 새 _id 가 CamelMongoOid 헤더에 배치됩니다.
예를 들면 다음과 같습니다.
from("direct:insert")
.to("mongodb:myDb?database=flights&collection=tickets&operation=save");
from("direct:insert")
.to("mongodb:myDb?database=flights&collection=tickets&operation=save");
// route: from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=save");
org.bson.Document docForSave = new org.bson.Document();
docForSave.put("key", "value");
Object result = template.requestBody("direct:insert", docForSave);
// route: from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=save");
org.bson.Document docForSave = new org.bson.Document();
docForSave.put("key", "value");
Object result = template.requestBody("direct:insert", docForSave);
45.7.2.3. 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
컬렉션에서 하나 이상의 레코드를 업데이트합니다. 필터 쿼리 및 업데이트 규칙이 필요합니다.
MongoDBConstants.CRITERIA 헤더를 사용하여 필터를 Bson 으로 정의하고 update 규칙을 body에서 Bson 으로 정의할 수 있습니다.
업데이트를 수행하기 전에 MongoDBConstants.CRITERIA 헤더를 Bson 으로 사용하여 필터를 정의한 후업데이트하기 전에 집계 패턴을 사용한 다음 mongodb 업데이트를 적용하는 경우 집계 중에 결과 camel 교환에서 제거해야 합니다.
mongodb 생산자 엔드포인트에 카밀리를 보내기 전에 통합 및/또는 MongoDBConstants.CRITERIA 헤더를 집계 중 이 헤더를 제거하지 않으면 mongodb를 업데이트하는 동안 camel exchange payload를 사용할 수 있습니다.
두 번째 방법은 List<Bson>을 정확히 2개의 요소를 포함하는 IN 메시지 본문으로 필요합니다.
- 요소 1(index 0) ECDHE 필터 쿼리 ECDHE 필터 쿼리는 일반적인 쿼리 오브젝트와 같이 영향을 받을 오브젝트를 결정합니다.
- 요소 2(인덱스는 1) 일치하는 오브젝트가 업데이트되는 방식을 업데이트합니다. MongoDB의 모든 수정자 작업이 지원됩니다.
Multiupdates
기본적으로, MongoDB는 여러 오브젝트가 필터 쿼리와 일치하는 경우에도 하나의 오브젝트만 업데이트합니다. MongoDB에서 일치하는 모든 레코드를 업데이트하도록 지정하려면 CamelMongoDbMultiUpdate IN 메시지 헤더를 true 로 설정합니다.
CamelMongoDbRecordsAffected 키가 있는 헤더가 반환됩니다(MongoDbConstants.RECORDS_AFFECTED ) 레코드 수가 업데이트됨( WriteResult.getN()에서 복사됨).
다음 IN 메시지 헤더를 지원합니다.
| 헤더 키 | 빠른 상수 | 설명 (MongoDB API doc에서 추출) | 예상 유형 |
|---|---|---|---|
|
|
| 업데이트가 일치하는 모든 오브젝트에 적용해야 하는 경우 http://www.mongodb.org/display/DOCS/Atomic+Operations을 참조하십시오. | 부울/부울 |
|
|
| 데이터베이스가 존재하지 않는 경우 해당 요소를 생성해야 하는 경우 | 부울/부울 |
예를 들어, 다음에서는 "scientist" 필드의 값을 "Darwin"으로 설정하여 filterField 필드가 true인 모든 레코드를 업데이트합니다.
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]";
Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]";
Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);
45.7.3. 삭제 작업 링크 복사링크가 클립보드에 복사되었습니다!
45.7.3.1. remove 링크 복사링크가 클립보드에 복사되었습니다!
컬렉션에서 일치하는 레코드를 제거합니다. IN 메시지 본문은 제거 필터 쿼리 역할을 하며 DBObject 유형 또는 변환 가능한 유형이 될 것으로 예상됩니다.
다음 예제에서는 과학 데이터베이스, notableScientists 컬렉션에서 필드 'conditionField'가 true인 모든 개체를 제거합니다.
// route: from("direct:remove").to("mongodb:myDb?database=science&collection=notableScientists&operation=remove");
Bson conditionField = Filters.eq("conditionField", true);
Object result = template.requestBody("direct:remove", conditionField);
// route: from("direct:remove").to("mongodb:myDb?database=science&collection=notableScientists&operation=remove");
Bson conditionField = Filters.eq("conditionField", true);
Object result = template.requestBody("direct:remove", conditionField);
CamelMongoDbRecordsAffected 키가 있는 헤더가 반환됨(MongoDbConstants.RECORDS_AFFECTED 상수) 유형 int. 여기에는 삭제된 레코드 수가 포함됩니다( WriteResult.getN()).
45.7.4. 대규모 쓰기 작업 링크 복사링크가 클립보드에 복사되었습니다!
45.7.4.1. bulkWrite 링크 복사링크가 클립보드에 복사되었습니다!
실행 순서에 대한 제어와 함께 쓰기 작업을 대규모로 수행합니다. List<WriteModel<Document >를 삽입, 업데이트 및 삭제 작업을 위한 명령이 포함된 IN 메시지 본문으로 필요합니다.
다음 예제에서는 "scientist" 필드의 값을 "Marie Curie"로 설정하고 ID "3"로 레코드가 삭제되어 ID "5"로 새ers "Pierre Curie"를 추가합니다.
기본적으로 작업은 순서대로 실행되며 목록의 나머지 쓰기 작업을 처리하지 않고 첫 번째 쓰기 오류에서 중단됩니다. MongoDB에서 목록의 나머지 쓰기 작업을 계속 처리하도록 지정하려면 CamelMongoDbBulkOrdered IN 메시지 헤더를 false 로 설정합니다. 정렬되지 않은 작업은 병렬로 실행되며 이 동작은 보장되지 않습니다.
| 헤더 키 | 빠른 상수 | 설명 (MongoDB API doc에서 추출) | 예상 유형 |
|---|---|---|---|
|
|
| 순서가 지정된 작업 또는 순서가 지정되지 않은 작업을 실행합니다. 기본값은 true입니다. | 부울/부울 |
45.7.5. 기타 작업 링크 복사링크가 클립보드에 복사되었습니다!
45.7.5.1. 집계 링크 복사링크가 클립보드에 복사되었습니다!
본문에 포함된 지정된 파이프라인을 사용하여 집계를 수행합니다. 집계는 길고 긴 작업이 될 수 있습니다. 주의해서 사용하십시오.
다음 IN 메시지 헤더를 지원합니다.
| 헤더 키 | 빠른 상수 | 설명 (MongoDB API doc에서 추출) | 예상 유형 |
|---|---|---|---|
|
|
| 일괄 처리당 반환할 문서 수를 설정합니다. | int/Integer |
|
|
| 집계 파이프라인 단계를 사용하여 임시 파일에 데이터를 작성할 수 있습니다. | 부울/부울 |
기본적으로 모든 결과의 목록이 반환됩니다. 결과 크기에 따라 메모리가 많을 수 있습니다. 더 안전한 대안은 outputType=MongoIterable을 설정하는 것입니다. 다음 프로세서는 메시지 본문에 반복 가능한 항목을 볼 수 있으므로 결과를 하나씩 진행할 수 있습니다. 따라서 배치 크기를 설정하고 iterable을 반환하면 결과를 효율적으로 검색하고 처리할 수 있습니다.
예를 들면 다음과 같습니다.
.split(body()) 을 호출하면 경로 아래로 항목을 하나씩 보내는 데 충분하지만 모든 항목을 메모리에 먼저 로드합니다. 따라서 .streaming() 을 호출하면 일괄 처리로 데이터를 메모리에 로드해야 합니다.
45.7.5.2. getDbStats 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB 쉘에서 db.stats() 명령을 실행하는 것과 동일하며 데이터베이스에 대한 유용한 통계 수치를 표시합니다.
예를 들면 다음과 같습니다.
사용법 예:
// from("direct:getDbStats").to("mongodb:myDb?database=flights&collection=tickets&operation=getDbStats");
Object result = template.requestBody("direct:getDbStats", "irrelevantBody");
assertTrue("Result is not of type Document", result instanceof Document);
// from("direct:getDbStats").to("mongodb:myDb?database=flights&collection=tickets&operation=getDbStats");
Object result = template.requestBody("direct:getDbStats", "irrelevantBody");
assertTrue("Result is not of type Document", result instanceof Document);
이 작업은 OUT 메시지 본문에 있는 문서 형태로 쉘에 표시된 것과 유사한 데이터 구조를 반환합니다.
45.7.5.3. getColStats 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB 쉘에서 db.collection.stats() 명령을 실행하는 것과 동일하며 컬렉션에 대한 유용한 통계 수를 표시합니다.
예를 들면 다음과 같습니다.
사용법 예:
// from("direct:getColStats").to("mongodb:myDb?database=flights&collection=tickets&operation=getColStats");
Object result = template.requestBody("direct:getColStats", "irrelevantBody");
assertTrue("Result is not of type Document", result instanceof Document);
// from("direct:getColStats").to("mongodb:myDb?database=flights&collection=tickets&operation=getColStats");
Object result = template.requestBody("direct:getColStats", "irrelevantBody");
assertTrue("Result is not of type Document", result instanceof Document);
이 작업은 OUT 메시지 본문에 있는 문서 형태로 쉘에 표시된 것과 유사한 데이터 구조를 반환합니다.
45.7.5.4. command 링크 복사링크가 클립보드에 복사되었습니다!
데이터베이스에서 명령으로 본문을 실행합니다. 관리자 작업에 호스트 정보, 복제 또는 샤딩 상태를 가져오는 데 유용합니다.
Collection 매개변수는 이 작업에 사용되지 않습니다.
// route: from("command").to("mongodb:myDb?database=science&operation=command");
DBObject commandBody = new BasicDBObject("hostInfo", "1");
Object result = template.requestBody("direct:command", commandBody);
// route: from("command").to("mongodb:myDb?database=science&operation=command");
DBObject commandBody = new BasicDBObject("hostInfo", "1");
Object result = template.requestBody("direct:command", commandBody);
45.7.6. 동적 작업 링크 복사링크가 클립보드에 복사되었습니다!
Exchange는 MongoDbConstants.OPERATION_HEADER 상수로 정의된 CamelMongoDbOperation 헤더를 설정하여 끝점의 고정 작업을 덮어쓸 수 있습니다.
지원되는 값은 MongoDbOperationForwarded에 의해 결정되며 엔드포인트 URI에서 작업 매개 변수에 대해 허용되는 값과 일치합니다.
예를 들면 다음과 같습니다.
// from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=insert");
Object result = template.requestBodyAndHeader("direct:insert", "irrelevantBody", MongoDbConstants.OPERATION_HEADER, "count");
assertTrue("Result is not of type Long", result instanceof Long);
// from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=insert");
Object result = template.requestBodyAndHeader("direct:insert", "irrelevantBody", MongoDbConstants.OPERATION_HEADER, "count");
assertTrue("Result is not of type Long", result instanceof Long);