Skip to content

Commit e397462

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 9b9788a commit e397462

File tree

4 files changed

+20
-40
lines changed

4 files changed

+20
-40
lines changed

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

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import static com.mongodb.internal.async.ErrorHandlingResultCallback.errorHandlingCallback;
4545
import static com.mongodb.internal.operation.CommandOperationHelper.executeCommand;
4646
import static com.mongodb.internal.operation.CommandOperationHelper.executeCommandAsync;
47+
import static com.mongodb.internal.operation.DocumentHelper.putIfNotNull;
4748
import static com.mongodb.internal.operation.DocumentHelper.putIfNotZero;
4849
import static com.mongodb.internal.operation.DocumentHelper.putIfTrue;
4950
import static com.mongodb.internal.operation.OperationHelper.AsyncCallableWithConnection;
@@ -594,20 +595,21 @@ public MapReduceStatistics apply(final BsonDocument result, final AsyncConnectio
594595

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

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818

1919
import com.mongodb.ExplainVerbosity;
2020
import com.mongodb.MongoNamespace;
21-
import com.mongodb.internal.async.SingleResultCallback;
2221
import com.mongodb.client.model.Collation;
2322
import com.mongodb.connection.ConnectionDescription;
2423
import com.mongodb.connection.ServerDescription;
24+
import com.mongodb.internal.async.SingleResultCallback;
2525
import com.mongodb.internal.binding.AsyncConnectionSource;
2626
import com.mongodb.internal.binding.AsyncReadBinding;
2727
import com.mongodb.internal.binding.ConnectionSource;
@@ -33,7 +33,6 @@
3333
import com.mongodb.internal.operation.CommandOperationHelper.CommandReadTransformer;
3434
import com.mongodb.internal.operation.CommandOperationHelper.CommandReadTransformerAsync;
3535
import com.mongodb.internal.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.internal.operation.CommandOperationHelper.CommandCreator;
5150
import static com.mongodb.internal.operation.CommandOperationHelper.executeCommand;
5251
import static com.mongodb.internal.operation.CommandOperationHelper.executeCommandAsync;
52+
import static com.mongodb.internal.operation.DocumentHelper.putIfNotNull;
5353
import static com.mongodb.internal.operation.DocumentHelper.putIfNotZero;
5454
import static com.mongodb.internal.operation.DocumentHelper.putIfTrue;
5555
import static com.mongodb.internal.operation.ExplainHelper.asExplainCommand;
@@ -429,13 +429,13 @@ private BsonDocument getCommand(final SessionContext sessionContext) {
429429
BsonDocument commandDocument = new BsonDocument("mapreduce", new BsonString(namespace.getCollectionName()))
430430
.append("map", getMapFunction())
431431
.append("reduce", getReduceFunction())
432-
.append("out", new BsonDocument("inline", new BsonInt32(1)))
433-
.append("query", asValueOrNull(getFilter()))
434-
.append("sort", asValueOrNull(getSort()))
435-
.append("finalize", asValueOrNull(getFinalizeFunction()))
436-
.append("scope", asValueOrNull(getScope()))
437-
.append("verbose", BsonBoolean.valueOf(isVerbose()));
432+
.append("out", new BsonDocument("inline", new BsonInt32(1)));
438433

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

driver-core/src/test/functional/com/mongodb/internal/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/internal/operation/MapReduceWithInlineResultsOperationSpecification.groovy

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

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

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

0 commit comments

Comments
 (0)