내가 찾은 것 같아요 ... mongodb의 자바 드라이버 소스에 대해 더 자세히 살펴 보았습니다. INLINE 출력 기능은 암시 적 접근 : mapReduce()
의 인터페이스 반환 형식의 기본 구현입니다
class MapReduceIterableImpl<TDocument, TResult>
(MapReduceIterableImpl.java가), 초기 값 true
와 private boolean inline
을 보유하고 있습니다.
는 MapReduce의 기본 동작의 출력을위한 collectionName 사용을 설정하는 컬렉션을 바꾸
이 이제까지 false
로 전환 될 수있는 유일한 장소는에 대한 설명은 다음과 같다있어서 collectionName(final String collectionName)
이고 이 사용 동작을 변경하려면 (com.mongodb.client.model.MapReduceAction). 당신이 mapReduce()
후 객체 인스턴스에이 메소드를 호출하지 않으면
, 그것은 의미 ... 초기화 등의 true
유지됩니다 : 더 출력 컬렉션이없는 경우, 그것은 인라인해야합니다. 나중에
, 당신이 마법 if
조건을 가졌으나 내부적으로 execute()
방법은 호출되는 iterator(), first(), forEach(...)
등으로 결과를 액세스 : collectionName()
가 호출되지 않은 경우는 MapReduceWithInlineResultsOperation
을 instanciating되도록 ...
if (inline) {
MapReduceWithInlineResultsOperation<TResult> operation =
new MapReduceWithInlineResultsOperation<TResult>(namespace,
new BsonJavaScript(mapFunction),
new BsonJavaScript(reduceFunction),
codecRegistry.get(resultClass))
.filter(toBsonDocument(filter))
.limit(limit)
.maxTime(maxTimeMS, MILLISECONDS)
.jsMode(jsMode)
.scope(toBsonDocument(scope))
.sort(toBsonDocument(sort))
.verbose(verbose)
.readConcern(readConcern);
....
} else {
MapReduceToCollectionOperation operation =
new MapReduceToCollectionOperation(namespace, new BsonJavaScript(mapFunction), new BsonJavaScript(reduceFunction),
collectionName)
.filter(toBsonDocument(filter))
.limit(limit)
.maxTime(maxTimeMS, MILLISECONDS)
.jsMode(jsMode)
.scope(toBsonDocument(scope))
.sort(toBsonDocument(sort))
.verbose(verbose)
.action(action.getValue())
.nonAtomic(nonAtomic)
.sharded(sharded)
.databaseName(databaseName)
.bypassDocumentValidation(bypassDocumentValidation);
합니다.
내 NetBeans가 지금 나를 싫어하기 때문에 테스트 할 기회가 없었지만 꽤 분명하다고 생각합니다. 당신은 무엇을 생각하니, 나는 무엇인가 놓쳤는가?
코드를 API 3.x, 훌륭한 프로젝트로 옮기는 데 도움이된다면 다행입니다.