227.6. MongoDB 작업 - 생산자 끝점

227.6.1. 쿼리 작업

227.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("mongodb:myDb?database=flights&collection=tickets&operation=findById")
    .to("mock:resultFindById");
작은 정보

선택적 매개변수를 지원합니다. 이 작업을 통해 필드 필터를 지정할 수 있습니다. 선택적 매개변수 지정을 참조하십시오.

227.6.1.2. findOneByQuery

이 작업을 사용하여 MongoDB 쿼리와 일치하는 컬렉션에서 하나의 요소만 검색합니다. 쿼리 오브젝트는 IN 메시지 본문에서 추출됩니다. 즉, DBObject 유형이거나 DBObject 로 변환할 수 있어야 합니다. JSON 문자열 또는 Hashmap일 수 있습니다. 자세한 내용은 #Type 변환을 참조하십시오.

쿼리가 없는 예(컬렉션의 모든 개체를 복원함):

from("direct:findOneByQuery")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");

쿼리가 있는 예(1개의 일치하는 결과가 반환)의 예:

from("direct:findOneByQuery")
    .setBody().constant("{ \"name\": \"Raul Kripalani\" }")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");
작은 정보

선택적 매개변수를 지원합니다. 이 작업을 통해 필드 필터 및/또는 sort 절을 지정할 수 있습니다. 선택적 매개변수 지정을 참조하십시오.

227.6.1.3. findAll

findAll 작업은 쿼리와 일치하는 모든 문서를 반환하거나 전혀 없는 경우 컬렉션에 포함된 모든 문서가 반환됩니다. 쿼리 오브젝트는 IN 메시지 본문에서 추출됩니다. 즉, DBObject 유형이거나 DBObject 로 변환할 수 있어야 합니다. JSON 문자열 또는 Hashmap일 수 있습니다. 자세한 내용은 #Type 변환을 참조하십시오.

쿼리가 없는 예제입니다(컬렉션의 모든 개체를 복원함):

from("direct:findAll")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");

쿼리가 있는 예(모든 일치하는 결과가 반환)의 예:

from("direct:findAll")
    .setBody().constant("{ \"name\": \"Raul Kripalani\" }")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");

다음 헤더를 통해 페이징 및 효율적인 검색이 지원됩니다.

헤더 키빠른 상수설명 (MongoDB API doc에서 추출)예상 유형

CamelMongoDbNumToSkip

MongoDbConstants.NUM_TO_SKIP

커서가 시작될 때 지정된 수의 요소를 삭제합니다.

int/Integer

CamelMongoDbLimit

MongoDbConstants.LIMIT

반환된 요소 수를 제한합니다.

int/Integer

CamelMongoDbBatchSize

MongoDbConstants.BATCH_SIZE

하나의 일괄 처리로 반환된 요소 수를 제한합니다. 커서는 일반적으로 결과 오브젝트의 일괄 처리를 가져와서 로컬에 저장합니다. batchSize가 양수인 경우 검색된 오브젝트의 각 배치 크기를 나타냅니다. 성능을 최적화하고 데이터 전송을 제한하도록 조정할 수 있습니다. batchSize가 음수이면 최대 배치 크기 제한(일반적으로 4MB) 내에 맞는 수의 오브젝트가 제한되고 커서가 닫힙니다. 예를 들어 batchSize가 -10인 경우 서버는 최대 10개의 문서와 가능한 한 많은 문서를 반환한 다음 커서를 닫습니다. 이 기능은 문서의 limit()과 최대 크기 내에 적합해야 하며, 커서 서버 측을 종료하기 위해 요청을 보낼 필요가 없습니다. 커서가 반복된 후에도 배치 크기를 변경할 수 있으며, 이 경우 다음 배치 검색에 설정이 적용됩니다.

int/Integer

outputType=DBCursor (Camel 2.16+)를 위 헤더를 설정하는 것보다 더 간단할 수 있는 엔드포인트 옵션으로 서버에서 반환된 문서를 "스트림"할 수도 있습니다. 이렇게 하면 몬고 쉘에서 findAll()를 실행하는 것처럼 몽고 드라이버의 DBCursor를 사용하여 경로를 반복할 수 있습니다. 기본적으로 이 구성 요소는 이 옵션 없이 드라이버의 커서에 있는 문서를 List로 로드하고 이를 경로로 반환하므로 많은 메모리 내 오브젝트가 발생할 수 있습니다. DBCursor를 사용하면 일치하는 문서 수를 요구하지 않습니다. 자세한 내용은 MongoDB 설명서 사이트를 참조하십시오.

옵션 outputType=DBCursor 및 배치 크기가 있는 예:

from("direct:findAll")
    .setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
    .setBody().constant("{ \"name\": \"Raul Kripalani\" }")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll&outputType=DBCursor")
    .to("mock:resultFindAll");

findAll 작업은 다음 OUT 헤더를 반환하여 페이징을 사용하는 경우 결과 페이지를 반복할 수 있습니다.

헤더 키빠른 상수설명 (MongoDB API doc에서 추출)데이터 유형

CamelMongoDbResultTotalSize

MongoDbConstants.RESULT_TOTAL_SIZE

쿼리와 일치하는 오브젝트 수입니다. 이는 제한/실패를 고려하지 않습니다.

int/Integer

CamelMongoDbResultPageSize

MongoDbConstants.RESULT_PAGE_SIZE

쿼리와 일치하는 오브젝트 수입니다. 이는 제한/실패를 고려하지 않습니다.

int/Integer

작은 정보

선택적 매개변수를 지원합니다. 이 작업을 통해 필드 필터 및/또는 sort 절을 지정할 수 있습니다. 선택적 매개변수 지정을 참조하십시오.

227.6.1.4. count

컬렉션의 총 오브젝트 수를 반환하고 OUT 메시지 본문으로 Long을 반환합니다.
다음 예제에서는 "dynamicECDHEName" 컬렉션의 레코드 수를 계산합니다. 역동성이 활성화되는 방식을 확인하고 결과적으로 "notableScientists" 컬렉션에 대해 작업이 실행되지 않지만 "dynamicECDHEName" 컬렉션에 대해 실행됩니다.

// 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);

Camel 2.14 이상에서 메시지 본문에 쿼리로 com.mongodb.DBObject 오브젝트를 제공할 수 있으며, 작업은 이 기준과 일치하는 문서 양을 반환합니다. 

 

DBObject query = ...
Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");

227.6.1.5. 필드 필터 지정 (프로젝트)

쿼리 작업은 기본적으로 일치하는 오브젝트를 전체(모든 필드 포함)에서 반환합니다. 문서가 크고 해당 필드의 하위 집합만 검색해야 하는 경우 CamelMongoDbFieldsFilter 헤더, MongoDbConstants.FIELDS_FILTER 에서 관련 DBObject (또는 유형 변환 가능)를 DBObject로 설정하여 모든 쿼리 작업에서 필드 필터를 지정할 수 있습니다.

다음은 MongoDB의 BasicDBObjectBuilder를 사용하여 DBObject 생성을 단순화하는 예입니다. _idField 를 제외한 모든 필드를 검색합니다. :

// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
DBObject fieldFilter = BasicDBObjectBuilder.start().add("_id", 0).add("boringField", 0).get();
Object result = template.requestBodyAndHeader("direct:findAll", (Object) null, MongoDbConstants.FIELDS_FILTER, fieldFilter);

227.6.1.6. sort 절 지정

특정 필드의 정렬에 따라 컬렉션에서 min/max 레코드를 가져와야 하는 경우가 많습니다. Mongo에서 작업은 다음과 유사한 구문을 사용하여 수행됩니다.

db.collection.find().sort({_id: -1}).limit(1)
// or
db.collection.findOne({$query:{},$orderby:{_id:-1}})

Camel 경로에서 SORT_BY 헤더는 findOneByQuery 작업과 함께 사용하여 동일한 결과를 얻을 수 있습니다. ResticELDS_FILTER 헤더도 지정된 경우 작업은 다른 구성 요소(예: 매개 변수화된 MyBatis query)로 직접 전달할 수 있는 단일 필드/값 쌍을 반환합니다. 이 예제에서는 컬렉션에서 임시로 최신 문서를 가져오고 documentTimestamp 필드를 기반으로 결과를 단일 필드로 줄이는 방법을 보여줍니다.

.from("direct:someTriggeringEvent")
.setHeader(MongoDbConstants.SORT_BY).constant("{\"documentTimestamp\": -1}")
.setHeader(MongoDbConstants.FIELDS_FILTER).constant("{\"documentTimestamp\": 1}")
.setBody().constant("{}")
.to("mongodb:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery")
.to("direct:aMyBatisParameterizedSelect")
;

227.6.2. 생성/업데이트 작업

227.6.2.1. insert

IN 메시지 본문에서 가져온 MongoDB 컬렉션에 새 오브젝트를 삽입합니다. 유형 변환은 DBObject 또는 List 로 변환하려고 합니다.
두 가지 모드가 지원됩니다. 단일 삽입과 여러 삽입이 지원됩니다. 여러 삽입의 경우 끝점은 모든 유형의 List, Array 또는 Collections의 오브젝트가 있는 동안 또는 - DBObject 로 변환될 수 있습니다. 모든 개체는 한 번에 삽입됩니다. 끝점은 입력에 따라 호출할 백엔드 작업(단일 또는 여러 삽입)을 지능적으로 결정합니다.

예제:

from("direct:insert")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=insert");

이 작업은 WriteResult를 반환하며 WriteConcern 또는 invokeGetLastError 옵션 값에 따라 getLastError() 가 이미 호출되어 있습니다. 쓰기 작업의 궁극적인 결과에 액세스하려면 WriteResult 에서 getLastError() 또는 getCachedLastError() 를 호출하여 CommandResult 를 검색해야 합니다. 그런 다음 CommandResult.ECDHE() , CommandResult.getErrorMessage() 및/또는 CommandResult.getException() 을 호출하여 결과를 확인할 수 있습니다.

새 개체의 _id 는 컬렉션에서 고유해야 합니다. 값을 지정하지 않으면 MongoDB가 자동으로 값을 생성합니다. 그러나 이를 지정하고 고유하지 않은 경우 삽입 작업이 실패합니다(및 Camel의 경우 알림을 받으려면 invokeGetLastError를 활성화하거나 쓰기 결과를 기다리는 WriteConcern을 설정해야 합니다).

이는 구성 요소의 제한 사항은 아니지만 처리량 향상을 위해 MongoDB에서 작동하는 방법입니다. 사용자 지정 _id 를 사용하는 경우 애플리케이션 수준에서 고유해야 합니다(따라서도 좋습니다).

Camel 2.15 이후 : 삽입된 레코드의 OID는 CamelMongoOid 키(MongoDbConstants.OID 상수) 아래의 메시지 헤더에 저장됩니다. 저장된 값은 여러 레코드가 삽입된 경우 단일 삽입 또는 java.util.List< org.bson.types.ObjectId >의 경우 org.bson.types.ObjectId 입니다.

227.6.2.2. save

save 작업은 upsert (UPdate, inSERT) 작업과 동일합니다. 여기서 레코드가 업데이트되고 존재하지 않는 경우 모두 하나의 원자 작업으로 삽입됩니다. MongoDB는 _id 필드를 기반으로 일치를 수행합니다.

업데이트의 경우 오브젝트가 완전히 교체되고 MongoDB의 $modifiers 사용은 허용되지 않습니다. 따라서 이미 존재하는 경우 오브젝트를 조작하려면 다음 두 가지 옵션이 있습니다.

  1. 쿼리를 수행하여 먼저 전체 오브젝트를 모든 필드(유효하지 않음)와 함께 검색하고 Camel 내부에서 변경한 다음 저장합니다.
  2. 대신 서버 측에서 업데이트를 실행하는 $modifiers 와 함께 업데이트 작업을 사용합니다. upsert 플래그를 활성화할 수 있습니다. 이 경우 삽입이 필요한 경우 MongoDB는 필터 쿼리 오브젝트에 $modifiers를 적용하여 결과를 삽입합니다.

예를 들면 다음과 같습니다.

from("direct:insert")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=save");

227.6.2.3. update

컬렉션에서 하나 이상의 레코드를 업데이트합니다. 정확히 2개의 요소가 포함된 IN 메시지 본문으로 List<DBObject>가 필요합니다.

  • 요소 1(인덱스 0) 필터 쿼리는 일반적인 쿼리 오브젝트와 동일하게 영향을 받는 오브젝트를 결정합니다.
  • 요소 2(인덱스 1) 일치하는 오브젝트가 업데이트되는 업데이트 규칙입니다. MongoDB의 모든 수정자 작업이 지원됩니다.
참고

Multiupdates 입니다. 기본적으로 MongoDB는 여러 오브젝트가 필터 쿼리와 일치하는 경우에도 1개의 오브젝트만 업데이트합니다. MongoDB에 일치하는 모든 레코드를 업데이트하도록 지시하려면 CamelMongoDbMultiUpdate IN 메시지 헤더를 true 로 설정합니다.

CamelMongoDbRecordsAffected 가 포함된 헤더가 반환되며 (MongoDbConstants.RECORDS_AFFECTED 상수)에 업데이트되는 레코드 수( WriteResult.getN()에서 복사됨)가 반환됩니다.

다음 IN 메시지 헤더를 지원합니다.

헤더 키빠른 상수설명 (MongoDB API doc에서 추출)예상 유형

CamelMongoDbMultiUpdate

MongoDbConstants.MULTIUPDATE

업데이트가 일치하는 모든 오브젝트에 적용해야 하는 경우입니다. http://www.mongodb.org/display/DOCS/Atomic+Operations을 참조하십시오.

boolean/Boolean

CamelMongoDbUpsert

MongoDbConstants.UPSERT

데이터베이스가 없는 경우 요소를 생성해야 하는 경우

boolean/Boolean

예를 들어 다음은 "scientist" 필드의 값을 "Darwin"으로 설정하여 filterField 필드가 true인 모든 레코드를 업데이트합니다.

// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
DBObject filterField = new BasicDBObject("filterField", true);
DBObject updateObj = new BasicDBObject("$set", new BasicDBObject("scientist", "Darwin"));
Object result = template.requestBodyAndHeader("direct:update", new Object[] {filterField, updateObj}, MongoDbConstants.MULTIUPDATE, true);

227.6.3. 삭제 작업

227.6.3.1. 제거

컬렉션에서 일치하는 레코드를 제거합니다. IN 메시지 본문이 제거 필터 쿼리 역할을 하며 DBObject 유형 또는 변환 가능한 유형이 될 것으로 예상됩니다.
다음 예제에서는 'conditionField' 필드가 true와 같으며, 과학 데이터베이스 (notableScientists) 컬렉션에서 모든 개체를 제거합니다.

// route: from("direct:remove").to("mongodb:myDb?database=science&collection=notableScientists&operation=remove");
DBObject conditionField = new BasicDBObject("conditionField", true);
Object result = template.requestBody("direct:remove", conditionField);

CamelMongoDbRecordsAffected 가 있는 헤더가 반환됨(MongoDbConstants.RECORDS_AFFECTED 상수)이며 int 유형으로 삭제된 레코드 수( WriteResult.getN()에서 인용됨)가 포함됩니다.

227.6.4. 대규모 쓰기 작업

227.6.4.1. bulkWrite

Camel 2.21에서 사용 가능

실행 순서에 대한 제어를 사용하여 대량으로 쓰기 작업을 수행합니다. 삽입, 업데이트 및 삭제 작업에 대한 명령이 포함된 IN 메시지 본문으로 List<WriteModel<DBObject 199)가 필요합니다.

다음 예제에서는 "scientist" 필드의 값을 "Marie Curie"로 설정하고 id "3"으로 레코드를 삭제하여 새로운 "Pierre Curie", id "5"로 레코드를 업데이트합니다.

// route: from("direct:bulkWrite").to("mongodb:myDb?database=science&collection=notableScientists&operation=bulkWrite");
List<WriteModel<DBObject>> bulkOperations = Arrays.asList(
            new InsertOneModel<>(new BasicDBObject("scientist", "Pierre Curie")),
            new UpdateOneModel<>(new BasicDBObject("_id", "5"),
                                 new BasicDBObject("$set", new BasicDBObject("scientist", "Marie Curie"))),
            new DeleteOneModel<>(new BasicDBObject("_id", "3")));

BulkWriteResult result = template.requestBody("direct:bulkWrite", bulkOperations, BulkWriteResult.class);

기본적으로 작업은 목록의 나머지 쓰기 작업을 처리하지 않고 첫 번째 쓰기 오류에서 순서대로 실행되고 중단됩니다. MongoDB에서 목록의 나머지 쓰기 작업을 계속 처리하도록 지시하려면 CamelMongoDbBulkOrdered IN 메시지 헤더를 false 로 설정합니다. 순서가 지정되지 않은 작업은 병렬로 실행되며 이 동작은 보장되지 않습니다.

헤더 키빠른 상수설명 (MongoDB API doc에서 추출)예상 유형

CamelMongoDbBulkOrdered

MongoDbConstants.BULK_ORDERED

순서가 지정되지 않은 작업 실행 또는 정렬되지 않은 작업을 수행합니다. 기본값은 true입니다.

boolean/Boolean

227.6.5. 기타 작업

227.6.5.1. 집계

Camel 2.14에서 사용 가능

본문에 포함된 지정된 파이프라인으로 집계를 수행합니다. 집계는 길고 많은 작업이 될 수 있습니다. 주의해서 사용하십시오.

// route: from("direct:aggregate").to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate");
from("direct:aggregate")
    .setBody().constant("[{ $match : {$or : [{\"scientist\" : \"Darwin\"},{\"scientist\" : \"Einstein\"}]}},{ $group: { _id: \"$scientist\", count: { $sum: 1 }} } ]")
    .to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate")
    .to("mock:resultAggregate");

다음 IN 메시지 헤더를 지원합니다.

헤더 키빠른 상수설명 (MongoDB API doc에서 추출)예상 유형

CamelMongoDbBatchSize

MongoDbConstants.BATCH_SIZE

일괄 처리당 반환할 문서 수를 설정합니다.

int/Integer

CamelMongoDbAllowDiskUse

MongoDbConstants.ALLOW_DISK_USE

집계 파이프라인 단계를 활성화하여 임시 파일에 데이터를 쓸 수 있습니다.

boolean/Boolean

outputType=DBCursor를 통해 효율적인 검색이 지원됩니다.

outputType=DBCursor (Camel 2.21+)를 위 헤더를 설정하는 것보다 더 간단할 수 있는 엔드포인트 옵션으로 서버에서 반환된 문서를 "스트림"할 수도 있습니다. 이렇게 하면 몽고 쉘 내에서 aggregate()를 실행하는 것처럼 몽고 드라이버의 DBCursor를 사용하여 경로를 반복할 수 있습니다. 기본적으로 이 구성 요소는 이 옵션 없이 드라이버의 커서에 있는 문서를 List로 로드하고 이를 경로로 반환하므로 많은 메모리 내 오브젝트가 발생할 수 있습니다. DBCursor를 사용하면 일치하는 문서 수를 요구하지 않습니다. 자세한 내용은 MongoDB 설명서 사이트를 참조하십시오.

옵션 outputType=DBCursor 및 배치 크기가 있는 예:

// route: from("direct:aggregate").to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate");
from("direct:aggregate")
    .setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
    .setBody().constant("[{ $match : {$or : [{\"scientist\" : \"Darwin\"},{\"scientist\" : \"Einstein\"}]}},{ $group: { _id: \"$scientist\", count: { $sum: 1 }} } ]")
    .to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate&outputType=DBCursor")
    .to("mock:resultAggregate");

227.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
}

사용 예:

// 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 DBObject", result instanceof DBObject);

이 작업은 OUT 메시지 본문에서 DBObject 의 형태로 쉘에 표시된 것과 유사한 데이터 구조를 반환합니다.

227.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
}

사용 예:

// 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 DBObject", result instanceof DBObject);

이 작업은 OUT 메시지 본문에서 DBObject 의 형태로 쉘에 표시된 것과 유사한 데이터 구조를 반환합니다.

227.6.5.4. command

Camel 2.15에서 사용 가능

데이터베이스에서 명령으로 본문을 실행합니다. admin 작업에는 호스트 정보, 복제 또는 샤딩 상태를 가져오는 데 사용합니다.

Collection 매개변수는 이 작업에 사용되지 않습니다.

// route: from("command").to("mongodb:myDb?database=science&operation=command");
DBObject commandBody = new BasicDBObject("hostInfo", "1");
Object result = template.requestBody("direct:command", commandBody);

227.6.6. 동적 작업

Exchange는 MongoDbConstants.OPERATION_HEADER 상수로 정의된 CamelMongoDbOperation 헤더를 설정하여 끝점의 고정 작업을 덮어쓸 수 있습니다.
지원되는 값은 MongoDbOperationECDHE에 의해 결정되며 엔드포인트 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);