230.6. MongoDB 작업 - 생산자 끝점
230.6.1. 쿼리 작업 링크 복사링크가 클립보드에 복사되었습니다!
230.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");
선택적 매개변수를 지원합니다. 이 작업은 필드 필터를 지정할 수 있습니다. 선택적 매개변수 지정을 참조하십시오.
230.6.1.2. findOneByQuery 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB 쿼리와 일치하는 컬렉션에서 하나의 요소(첫 번째)만 검색하려면 이 작업을 사용합니다. 쿼리 오브젝트는 추출된 CamelMongoDbCriteria 헤더 입니다. CamelMongoDbCriteria 헤더가 null이면 쿼리 오브젝트가 Bson 유형 또는 Bson 으로 변환할 수 있어야 합니다. JSON 문자열 또는 Hashmap일 수 있습니다. 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");
선택적 매개변수를 지원합니다. 이 작업은 필드 프로젝션 및/또는 정렬 절을 지정할 수 있습니다. 선택적 매개변수 지정을 참조하십시오.
230.6.1.3. findAll 링크 복사링크가 클립보드에 복사되었습니다!
findAll 작업은 쿼리와 일치하는 모든 문서를 반환하거나 컬렉션에 포함된 모든 문서가 반환됩니다. 쿼리 오브젝트는 추출된 CamelMongoDbCriteria 헤더 입니다. CamelMongoDbCriteria 헤더가 null이면 쿼리 오브젝트가 Bson 유형 또는 Bson 으로 변환할 수 있어야 합니다. JSON 문자열 또는 Hashmap일 수 있습니다. 자세한 내용은 #Type Conversion 을 참조하십시오.
쿼리가 없는 예(컬렉션의 모든 오브젝트 반환):
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");
페이징 및 효율적인 검색은 다음 헤더를 통해 지원됩니다.
| 헤더 키 | 빠른 상수 | 설명 (Mongo API doc에서 추가됨) | 예상 유형 |
|---|---|---|---|
|
|
| 커서가 시작될 때 지정된 수의 요소를 삭제합니다. | int/Integer |
|
|
| 반환된 요소 수를 제한합니다. | int/Integer |
|
|
| 하나의 일괄 처리로 반환되는 요소 수를 제한합니다. 일반적으로 커서는 결과 오브젝트의 배치를 가져와서 로컬에 저장합니다. batchSize가 양수이면 검색된 오브젝트의 각 배치의 크기를 나타냅니다. 성능을 최적화하고 데이터 전송을 제한하도록 조정할 수 있습니다. batchSize가 음수이면 반환된 수 개체가 제한되며 최대 배치 크기 제한(일반적으로 4MB)에 적합하며 커서가 종료됩니다. 예를 들어 batchSize가 -10인 경우 서버는 최대 10개의 문서와 4MB에 맞게 할 수 있는 문서 수를 반환한 다음 커서를 닫습니다. 이 기능은 해당 문서의 limit()과 최대 크기에 적합해야 하며 커서 서버 측을 종료하기 위해 요청을 보낼 필요가 없습니다. 커서가 반복된 후에도 배치 크기를 변경할 수 있으며 이 경우 다음 배치 검색에 설정이 적용됩니다. | int/Integer |
옵션이 outputType=MongoIterable 및 batch size인 예:
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 헤더를 반환합니다.
| 헤더 키 | 빠른 상수 | 설명 (Mongo API doc에서 추가됨) | 데이터 유형 |
|---|---|---|---|
|
|
| 쿼리와 일치하는 오브젝트 수입니다. 이는 limit/skip를 고려하지 않습니다. | int/Integer |
|
|
| 쿼리와 일치하는 오브젝트 수입니다. 이는 limit/skip를 고려하지 않습니다. | int/Integer |
선택적 매개변수를 지원합니다. 이 작업은 필드 프로젝션 및/또는 정렬 절을 지정할 수 있습니다. 선택적 매개변수 지정을 참조하십시오.
230.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");
230.6.1.5. 필드 필터 지정(프로젝션) 링크 복사링크가 클립보드에 복사되었습니다!
기본적으로 쿼리 작업은 일치하는 오브젝트 전체(모든 필드 포함)를 반환합니다. 문서가 크며 필드의 하위 집합만 검색해야 하는 경우 CamelMongo 필터를 지정할 수 있습니다.
DbConstants.FIELDS_PROJECTION.FIELDS_PROJECTION 에서 관련 (또는 JSON 문자열, Map 등)을 설정하여 모든 쿼리 작업에서 필드Bson
다음은 MongoDB의 프로젝션 을 사용하여 Bson 생성을 단순화하는 예입니다. _id 및keygen 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);
다음은 MongoDB의 프로젝션 을 사용하여 Bson 생성을 단순화하는 예입니다. _id 및keygen 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);
230.6.1.6. 정렬 절 지정 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB의 정렬을 사용하여 Bson 생성을 단순화하는 특정 필드에 따라 컬렉션에서 min/max 레코드를 가져와야 하는 경우가 많습니다. _id 및keygen 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")
;
230.6.2. 생성/업데이트 작업 링크 복사링크가 클립보드에 복사되었습니다!
230.6.2.1. 삽입 링크 복사링크가 클립보드에 복사되었습니다!
IN 메시지 본문에서 가져온 MongoDB 컬렉션에 새 오브젝트를 삽입합니다. 유형 변환은 문서 또는 목록으로 전환하려고 시도합니다.
두 가지 모드가 지원됩니다. 단일 삽입과 여러 개의 삽입입니다. 여러 삽입의 경우 끝점에는 모든 유형의 개체의 List, Array 또는 Collections가 있거나 문서로 변환될 수 있습니다.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("mongodb3: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로 업데이트됩니다.
230.6.2.2. 저장 링크 복사링크가 클립보드에 복사되었습니다!
저장 작업은 upsert (UPdate, inSERT) 작업과 동일합니다. 여기서 레코드가 업데이트되고 존재하지 않으면 하나의 원자 작업으로 삽입됩니다. MongoDB는 _id 필드를 기반으로 일치를 수행합니다.
업데이트 시 오브젝트가 완전히 교체되고 MongoDB $modifiers 사용은 허용되지 않습니다. 따라서 이미 존재하는 경우 오브젝트를 조작하려면 다음 두 가지 옵션이 있습니다.
- 모든 필드와 함께 먼저 전체 오브젝트를 검색하고 Camel 내에서 변경한 후 저장합니다.
- 대신 서버 측에서 업데이트를 실행하는 $modifiers 와 함께 업데이트 작업을 사용합니다. upsert 플래그를 활성화할 수 있습니다. 이 경우 삽입이 필요한 경우 MongoDB는 $modifiers를 필터 쿼리 오브젝트에 적용하고 결과를 삽입합니다.
저장할 문서에 _id 속성이 포함되어 있지 않으면 작업이 삽입되고 생성된 새 _id 는 CamelMongoOid 헤더에 배치됩니다.
예를 들면 다음과 같습니다.
from("direct:insert")
.to("mongodb3:myDb?database=flights&collection=tickets&operation=save");
230.6.2.3. 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
컬렉션에서 하나 이상의 레코드를 업데이트합니다. 필터 쿼리 및 업데이트 규칙이 필요합니다.
MongoDBConstants.CRITERIA 헤더를 사용하여 필터를 Bson 으로 정의하고 업데이트 규칙을 본문에서 Bson 으로 정의할 수 있습니다.
번성 후 업데이트 . MongoDBConstants.CRITERIA 헤더를 Bson 으로 사용하여 업데이트되기 전에 mongodb 헤더를 쿼리하여 필터를 정의하는 동안 집계 전략으로 보강 패턴을 사용한 다음 mongodb 업데이트를 적용하는 경우 집계 중에 결과 camel 교환에서 제거해야 합니다. mongodb 생산자 엔드포인트로 카멜 교환을 보내기 전에 집계 및/또는 MongoDBConstants.CRITERIA 헤더를 제거하지 않으면 mongodb를 업데이트하는 동안 잘못된 camel 교환 페이로드로 끝날 수 있습니다.
두 번째 방법은 정확히 2개의 요소를 포함하는 IN 메시지 본문으로 List<Bson>이 필요합니다.
- 요소 1 (index 0) Cryostat 필터 쿼리는 일반적인 쿼리 오브젝트와 동일하게 영향을 받을 오브젝트를 결정합니다.
- 요소 2(index 1): 일치하는 오브젝트가 어떻게 업데이트되는지를 업데이트합니다. MongoDB의 모든 수정자 작업이 지원됩니다.
Multiupdates . 기본적으로 MongoDB는 여러 오브젝트가 필터 쿼리와 일치하는 경우에도 1개의 오브젝트만 업데이트합니다. MongoDB에서 일치하는 모든 레코드를 업데이트하도록 지시하려면 CamelMongoDbMultiUpdate IN 메시지 헤더를 true 로 설정합니다.
키 CamelMongoDbRecordsAffected 가 있는 헤더가 반환되고(MongoDbConstants.RECORDS_AFFECTED 상수) 업데이트( WriteResult.getN()에서 복사됨)가 반환됩니다.
다음 IN 메시지 헤더를 지원합니다.
| 헤더 키 | 빠른 상수 | 설명 (Mongo API doc에서 추가됨) | 예상 유형 |
|---|---|---|---|
|
|
| 업데이트를 일치하는 모든 오브젝트에 적용해야 하는 경우 http://www.mongodb.org/display/DOCS/Atomic+Operations에서 참조하십시오. | 부울/부울 |
|
|
| If the database should create the element if it does not exist | 부울/부울 |
예를 들어 다음은 "scientist" 필드의 값을 "Darwin"으로 설정하여 filterField 필드가 true인 모든 레코드를 업데이트합니다.
// route: from("direct:update").to("mongodb3:myDb?database=science&collection=notableScientists&operation=update");
Bson filterField = Filters.eq("filterField", true);
String updateObj = Updates.set("scientist", "Darwin");
Object result = template.requestBodyAndHeader("direct:update", new Bson[] {filterField, Document.parse(updateObj)}, MongoDbConstants.MULTIUPDATE, true);
// route: from("direct:update").to("mongodb3:myDb?database=science&collection=notableScientists&operation=update");
Maps<String, Object> headers = new HashMap<>(2);
headers.add(MongoDbConstants.MULTIUPDATE, true);
headers.add(MongoDbConstants.FIELDS_FILTER, Filters.eq("filterField", true));
String updateObj = Updates.set("scientist", "Darwin");;
Object result = template.requestBodyAndHeaders("direct:update", updateObj, headers);
// route: from("direct:update").to("mongodb3:myDb?database=science&collection=notableScientists&operation=update");
String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]";
Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);
230.6.3. 작업 삭제 링크 복사링크가 클립보드에 복사되었습니다!
230.6.3.1. 제거 링크 복사링크가 클립보드에 복사되었습니다!
컬렉션에서 일치하는 레코드를 제거합니다. IN 메시지 본문은 제거 필터 쿼리 역할을 하며 DBObject 유형 또는 변환할 수 있는 유형이 될 것으로 예상됩니다.
다음 예제에서는 'conditionField' 필드가 true인 모든 개체를 Science 데이터베이스에서 notableScientists 컬렉션에서 제거합니다.
// route: from("direct:remove").to("mongodb3: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()에서 복사됨)가 반환됩니다.
230.6.4. 대량 쓰기 작업 링크 복사링크가 클립보드에 복사되었습니다!
230.6.4.1. bulkWrite 링크 복사링크가 클립보드에 복사되었습니다!
Camel 2.21부터 사용 가능
실행 순서에 대한 제어를 사용하여 대량으로 쓰기 작업을 수행합니다. 삽입, 업데이트 및 삭제 작업을 위한 명령을 포함하는 IN 메시지 본문으로 List<WriteModel<Document >>가 필요합니다.
다음 예제에서는 "scientist" 필드의 값을 "Marie Curie"로 설정하고 id "3"로 레코드를 삭제하여 ID "5"를 가진 새 event를 삽입합니다.
// route: from("direct:bulkWrite").to("mongodb:myDb?database=science&collection=notableScientists&operation=bulkWrite");
List<WriteModel<Document>> bulkOperations = Arrays.asList(
new InsertOneModel<>(new Document("scientist", "Pierre Curie")),
new UpdateOneModel<>(new Document("_id", "5"),
new Document("$set", new Document("scientist", "Marie Curie"))),
new DeleteOneModel<>(new Document("_id", "3")));
BulkWriteResult result = template.requestBody("direct:bulkWrite", bulkOperations, BulkWriteResult.class);
기본적으로 목록에 남아 있는 쓰기 작업을 처리하지 않고 첫 번째 쓰기 오류에서 작업이 실행되고 중단됩니다. MongoDB가 목록에 남아 있는 쓰기 작업을 계속 처리하도록 지시하려면 CamelMongoDbBulkOrdered IN 메시지 헤더를 false 로 설정합니다. 정렬되지 않은 작업은 병렬로 실행되며 이 동작은 보장되지 않습니다.
| 헤더 키 | 빠른 상수 | 설명 (Mongo API doc에서 추가됨) | 예상 유형 |
|---|---|---|---|
|
|
| 순서가 지정되거나 순서가 지정되지 않은 작업 실행을 수행합니다. 기본값은 true입니다. | 부울/부울 |
230.6.5. 기타 작업 링크 복사링크가 클립보드에 복사되었습니다!
230.6.5.1. 집계 링크 복사링크가 클립보드에 복사되었습니다!
본문에 포함된 지정된 파이프라인으로 집계를 수행합니다. 집계는 길고 많은 작업이 될 수 있습니다. 주의해서 사용하십시오.
// route: from("direct:aggregate").to("mongodb3:myDb?database=science&collection=notableScientists&operation=aggregate");
List<Bson> aggregate = Arrays.asList(match(or(eq("scientist", "Darwin"), eq("scientist",
group("$scientist", sum("count", 1)));
from("direct:aggregate")
.setBody().constant(aggregate)
.to("mongodb3:myDb?database=science&collection=notableScientists&operation=aggregate")
.to("mock:resultAggregate");
다음 IN 메시지 헤더를 지원합니다.
| 헤더 키 | 빠른 상수 | 설명 (Mongo API doc에서 추가됨) | 예상 유형 |
|---|---|---|---|
|
|
| 일괄 처리당 반환할 문서 수를 설정합니다. | int/Integer |
|
|
| 집계 파이프라인 단계를 통해 임시 파일에 데이터를 쓸 수 있습니다. | 부울/부울 |
기본적으로 모든 결과 목록이 반환됩니다. 이는 결과 크기에 따라 메모리가 무거울 수 있습니다. 더 안전한 대안은 outputType=MongoIterable을 설정하는 것입니다. 다음 프로세서는 메시지 본문에서 반복 가능한 결과를 하나씩 진행할 수 있도록 허용합니다. 따라서 배치 크기를 설정하고 iterable을 반환하면 결과를 효율적으로 검색하고 처리할 수 있습니다.
또한 outputType=DBCursor (Camel 2.21+)를 위 헤더 설정보다 간단하게 설정할 수 있는 엔드 포인트 옵션으로 서버에서 반환된 문서를 경로로 "스트림"할 수 있습니다. 이렇게 하면 Mongo 쉘 내에서 aggregate()를 실행하는 것과 마찬가지로 Mongo 드라이버의 DBCursor를 사용하여 경로를 반복할 수 있습니다. 기본적으로 이 구성 요소는 드라이버의 커서의 문서를 목록으로 로드하고 이를 경로로 반환하므로 많은 메모리 내 개체가 발생할 수 있습니다. DBCursor에서 일치하는 문서 수를 요청하지 않음 - 자세한 내용은 MongoDB 문서 사이트를 참조하십시오.
option outputType=MongoIterable 및 batch size의 예:
// route: from("direct:aggregate").to("mongodb3:myDb?database=science&collection=notableScientists&operation=aggregate&outputType=MongoIterable");
List<Bson> aggregate = Arrays.asList(match(or(eq("scientist", "Darwin"), eq("scientist",
group("$scientist", sum("count", 1)));
from("direct:aggregate")
.setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
.setBody().constant(aggregate)
.to("mongodb3:myDb?database=science&collection=notableScientists&operation=aggregate&outputType=MongoIterable")
.split(body())
.streaming()
.to("mock:resultAggregate");
.split(body()) 를 호출하면 경로를 하나씩 아래로 보낼 수 있지만 모든 항목을 먼저 메모리에 로드합니다. 따라서 .streaming() 을 호출하면 일괄 처리로 데이터를 메모리에 로드해야 합니다.
230.6.5.2. getDbStats 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB 쉘에서 db.stats() 명령을 실행하는 것과 동일합니다. 이 명령은 데이터베이스에 대한 유용한 통계 숫자를 표시합니다.
예를 들면 다음과 같습니다.
> db.stats();
{
"db" : "test",
"collections" : 7,
"objects" : 719,
"avgObjSize" : 59.73296244784423,
"dataSize" : 42948,
"storageSize" : 1000058880,
"numExtents" : 9,
"indexes" : 4,
"indexSize" : 32704,
"fileSize" : 1275068416,
"nsSizeMB" : 16,
"ok" : 1
}
usage 예:
// from("direct:getDbStats").to("mongodb3: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 메시지 본문의 Document 형태로 쉘에 표시된 것과 유사한 데이터 구조를 반환합니다.
230.6.5.3. getColStats 링크 복사링크가 클립보드에 복사되었습니다!
MongoDB 쉘에서 db.collection.stats() 명령을 실행하는 것과 마찬가지로 컬렉션에 대한 유용한 통계 수치가 표시됩니다.
예를 들면 다음과 같습니다.
> db.camelTest.stats();
{
"ns" : "test.camelTest",
"count" : 100,
"size" : 5792,
"avgObjSize" : 57.92,
"storageSize" : 20480,
"numExtents" : 2,
"nindexes" : 1,
"lastExtentSize" : 16384,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 8176,
"indexSizes" : {
"_id_" : 8176
},
"ok" : 1
}
usage 예:
// from("direct:getColStats").to("mongodb3: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 메시지 본문의 Document 형태로 쉘에 표시된 것과 유사한 데이터 구조를 반환합니다.
230.6.5.4. command 링크 복사링크가 클립보드에 복사되었습니다!
데이터베이스에서 본문을 명령으로 실행합니다. 호스트 정보, 복제 또는 샤딩 상태를 가져오는 것으로 관리자 작업에 유용합니다.
컬렉션 매개변수는 이 작업에 사용되지 않습니다.
// route: from("command").to("mongodb3:myDb?database=science&operation=command");
DBObject commandBody = new BasicDBObject("hostInfo", "1");
Object result = template.requestBody("direct:command", commandBody);
230.6.6. 동적 작업 링크 복사링크가 클립보드에 복사되었습니다!
교환은 MongoDbConstants.OPERATION_HEADER 상수에서 정의한 CamelMongoDbOperation 헤더를 설정하여 끝점의 수정된 작업을 재정의할 수 있습니다.
지원되는 값은 MongoDbOperation 열거에 의해 결정되며 엔드포인트 URI에서 작업 매개변수에 대해 허용되는 값과 일치합니다.
예를 들면 다음과 같습니다.
// from("direct:insert").to("mongodb3: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);