Skip to content

Commit a97d7d8

Browse files
committed
Avoid including default or null values in mapReduceCommand
* No longer sending null values for the query, sort, finalize, and scope fields * No longer sending false values for the sharded and nonAtomic fields of the out sub-document JAVA-3555
1 parent cae375b commit a97d7d8

File tree

4 files changed

+25
-45
lines changed

4 files changed

+25
-45
lines changed

driver-core/src/main/com/mongodb/operation/MapReduceToCollectionOperation.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,21 @@
4242
import static com.mongodb.assertions.Assertions.isTrue;
4343
import static com.mongodb.assertions.Assertions.notNull;
4444
import static com.mongodb.internal.async.ErrorHandlingResultCallback.errorHandlingCallback;
45+
import static com.mongodb.internal.operation.ServerVersionHelper.serverIsAtLeastVersionThreeDotTwo;
46+
import static com.mongodb.internal.operation.WriteConcernHelper.appendWriteConcernToCommand;
47+
import static com.mongodb.internal.operation.WriteConcernHelper.throwOnWriteConcernError;
4548
import static com.mongodb.operation.CommandOperationHelper.executeCommand;
4649
import static com.mongodb.operation.CommandOperationHelper.executeCommandAsync;
50+
import static com.mongodb.operation.DocumentHelper.putIfNotNull;
4751
import static com.mongodb.operation.DocumentHelper.putIfNotZero;
4852
import static com.mongodb.operation.DocumentHelper.putIfTrue;
4953
import static com.mongodb.operation.OperationHelper.AsyncCallableWithConnection;
54+
import static com.mongodb.operation.OperationHelper.CallableWithConnection;
5055
import static com.mongodb.operation.OperationHelper.LOGGER;
51-
import static com.mongodb.operation.OperationHelper.validateCollation;
5256
import static com.mongodb.operation.OperationHelper.releasingCallback;
53-
import static com.mongodb.internal.operation.ServerVersionHelper.serverIsAtLeastVersionThreeDotTwo;
54-
import static com.mongodb.operation.OperationHelper.CallableWithConnection;
55-
import static com.mongodb.operation.OperationHelper.withConnection;
57+
import static com.mongodb.operation.OperationHelper.validateCollation;
5658
import static com.mongodb.operation.OperationHelper.withAsyncConnection;
57-
import static com.mongodb.internal.operation.WriteConcernHelper.appendWriteConcernToCommand;
58-
import static com.mongodb.internal.operation.WriteConcernHelper.throwOnWriteConcernError;
59+
import static com.mongodb.operation.OperationHelper.withConnection;
5960
import static java.util.Arrays.asList;
6061
import static java.util.concurrent.TimeUnit.MILLISECONDS;
6162

@@ -595,20 +596,21 @@ public MapReduceStatistics apply(final BsonDocument result, final AsyncConnectio
595596

596597
private BsonDocument getCommand(final ConnectionDescription description) {
597598
BsonDocument outputDocument = new BsonDocument(getAction(), new BsonString(getCollectionName()));
598-
outputDocument.append("sharded", BsonBoolean.valueOf(isSharded()));
599-
outputDocument.append("nonAtomic", BsonBoolean.valueOf(isNonAtomic()));
599+
putIfTrue(outputDocument, "sharded", isSharded());
600+
putIfTrue(outputDocument, "nonAtomic", isNonAtomic());
600601
if (getDatabaseName() != null) {
601602
outputDocument.put("db", new BsonString(getDatabaseName()));
602603
}
603604
BsonDocument commandDocument = new BsonDocument("mapreduce", new BsonString(namespace.getCollectionName()))
604605
.append("map", getMapFunction())
605606
.append("reduce", getReduceFunction())
606-
.append("out", outputDocument)
607-
.append("query", asValueOrNull(getFilter()))
608-
.append("sort", asValueOrNull(getSort()))
609-
.append("finalize", asValueOrNull(getFinalizeFunction()))
610-
.append("scope", asValueOrNull(getScope()))
611-
.append("verbose", BsonBoolean.valueOf(isVerbose()));
607+
.append("out", outputDocument);
608+
609+
putIfNotNull(commandDocument, "query", getFilter());
610+
putIfNotNull(commandDocument, "sort", getSort());
611+
putIfNotNull(commandDocument, "finalize", getFinalizeFunction());
612+
putIfNotNull(commandDocument, "scope", getScope());
613+
putIfTrue(commandDocument, "verbose", isVerbose());
612614
putIfNotZero(commandDocument, "limit", getLimit());
613615
putIfNotZero(commandDocument, "maxTimeMS", getMaxTime(MILLISECONDS));
614616
putIfTrue(commandDocument, "jsMode", isJsMode());

driver-core/src/main/com/mongodb/operation/MapReduceWithInlineResultsOperation.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import com.mongodb.operation.CommandOperationHelper.CommandReadTransformer;
3434
import com.mongodb.operation.CommandOperationHelper.CommandReadTransformerAsync;
3535
import com.mongodb.session.SessionContext;
36-
import org.bson.BsonBoolean;
3736
import org.bson.BsonDocument;
3837
import org.bson.BsonInt32;
3938
import org.bson.BsonJavaScript;
@@ -50,6 +49,7 @@
5049
import static com.mongodb.operation.CommandOperationHelper.CommandCreator;
5150
import static com.mongodb.operation.CommandOperationHelper.executeCommand;
5251
import static com.mongodb.operation.CommandOperationHelper.executeCommandAsync;
52+
import static com.mongodb.operation.DocumentHelper.putIfNotNull;
5353
import static com.mongodb.operation.DocumentHelper.putIfNotZero;
5454
import static com.mongodb.operation.DocumentHelper.putIfTrue;
5555
import static com.mongodb.operation.ExplainHelper.asExplainCommand;
@@ -430,13 +430,13 @@ private BsonDocument getCommand(final SessionContext sessionContext) {
430430
BsonDocument commandDocument = new BsonDocument("mapreduce", new BsonString(namespace.getCollectionName()))
431431
.append("map", getMapFunction())
432432
.append("reduce", getReduceFunction())
433-
.append("out", new BsonDocument("inline", new BsonInt32(1)))
434-
.append("query", asValueOrNull(getFilter()))
435-
.append("sort", asValueOrNull(getSort()))
436-
.append("finalize", asValueOrNull(getFinalizeFunction()))
437-
.append("scope", asValueOrNull(getScope()))
438-
.append("verbose", BsonBoolean.valueOf(isVerbose()));
433+
.append("out", new BsonDocument("inline", new BsonInt32(1)));
439434

435+
putIfNotNull(commandDocument, "query", getFilter());
436+
putIfNotNull(commandDocument, "sort", getSort());
437+
putIfNotNull(commandDocument, "finalize", getFinalizeFunction());
438+
putIfNotNull(commandDocument, "scope", getScope());
439+
putIfTrue(commandDocument, "verbose", isVerbose());
440440
appendReadConcernToCommand(sessionContext, commandDocument);
441441
putIfNotZero(commandDocument, "limit", getLimit());
442442
putIfNotZero(commandDocument, "maxTimeMS", getMaxTime(MILLISECONDS));

driver-core/src/test/functional/com/mongodb/operation/MapReduceToCollectionOperationSpecification.groovy

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import org.bson.BsonDocument
3030
import org.bson.BsonInt32
3131
import org.bson.BsonInt64
3232
import org.bson.BsonJavaScript
33-
import org.bson.BsonNull
3433
import org.bson.BsonString
3534
import org.bson.Document
3635
import org.bson.codecs.DocumentCodec
@@ -233,12 +232,7 @@ class MapReduceToCollectionOperationSpecification extends OperationFunctionalSpe
233232
def expectedCommand = new BsonDocument('mapreduce', new BsonString(getCollectionName()))
234233
.append('map', mapF)
235234
.append('reduce', reduceF)
236-
.append('out', BsonDocument.parse('{replace: "outCollection", sharded: false, nonAtomic: false}'))
237-
.append('query', BsonNull.VALUE)
238-
.append('sort', BsonNull.VALUE)
239-
.append('finalize', BsonNull.VALUE)
240-
.append('scope', BsonNull.VALUE)
241-
.append('verbose', BsonBoolean.FALSE)
235+
.append('out', BsonDocument.parse('{replace: "outCollection"}'))
242236

243237
if (includeWriteConcern) {
244238
expectedCommand.append('writeConcern', WriteConcern.MAJORITY.asDocument())
@@ -260,7 +254,7 @@ class MapReduceToCollectionOperationSpecification extends OperationFunctionalSpe
260254
.bypassDocumentValidation(true)
261255
.verbose(true)
262256

263-
expectedCommand.append('out', BsonDocument.parse('{merge: "outCollection", sharded: false, nonAtomic: false, db: "dbName"}'))
257+
expectedCommand.append('out', BsonDocument.parse('{merge: "outCollection", db: "dbName"}'))
264258
.append('query', filter)
265259
.append('sort', sort)
266260
.append('finalize', finalizeF)

driver-core/src/test/functional/com/mongodb/operation/MapReduceWithInlineResultsOperationSpecification.groovy

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import org.bson.BsonDocument
3939
import org.bson.BsonInt32
4040
import org.bson.BsonInt64
4141
import org.bson.BsonJavaScript
42-
import org.bson.BsonNull
4342
import org.bson.BsonString
4443
import org.bson.BsonTimestamp
4544
import org.bson.Document
@@ -158,11 +157,6 @@ class MapReduceWithInlineResultsOperationSpecification extends OperationFunction
158157
.append('map', operation.getMapFunction())
159158
.append('reduce', operation.getReduceFunction())
160159
.append('out', new BsonDocument('inline', new BsonInt32(1)))
161-
.append('query', new BsonNull())
162-
.append('sort', new BsonNull())
163-
.append('finalize', new BsonNull())
164-
.append('scope', new BsonNull())
165-
.append('verbose', BsonBoolean.FALSE)
166160

167161
then:
168162
testOperation(operation, serverVersion, expectedCommand, async, helper.commandResult)
@@ -273,11 +267,6 @@ class MapReduceWithInlineResultsOperationSpecification extends OperationFunction
273267
"map" : { "$code" : "function(){ }" },
274268
"reduce" : { "$code" : "function(key, values){ }" },
275269
"out" : { "inline" : 1 },
276-
"query" : null,
277-
"sort" : null,
278-
"finalize" : null,
279-
"scope" : null,
280-
"verbose" : false,
281270
}''')
282271
appendReadConcernToCommand(sessionContext, commandDocument)
283272

@@ -325,11 +314,6 @@ class MapReduceWithInlineResultsOperationSpecification extends OperationFunction
325314
"map" : { "$code" : "function(){ }" },
326315
"reduce" : { "$code" : "function(key, values){ }" },
327316
"out" : { "inline" : 1 },
328-
"query" : null,
329-
"sort" : null,
330-
"finalize" : null,
331-
"scope" : null,
332-
"verbose" : false,
333317
}''')
334318
appendReadConcernToCommand(sessionContext, commandDocument)
335319

0 commit comments

Comments
 (0)