Skip to content

Commit 0ce5c4f

Browse files
authored
Support let option in aggregation helper (#726)
JAVA-4186
1 parent 6ab9ce6 commit 0ce5c4f

File tree

14 files changed

+598
-16
lines changed

14 files changed

+598
-16
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,11 @@ public AggregateOperation<T> comment(final String comment) {
228228
return this;
229229
}
230230

231+
public AggregateOperation<T> let(final BsonDocument variables) {
232+
wrapped.let(variables);
233+
return this;
234+
}
235+
231236
/**
232237
* Enables retryable reads if a read fails due to a network error.
233238
*

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ class AggregateOperationImpl<T> implements AsyncReadOperation<AsyncBatchCursor<T
7777
private BsonValue hint;
7878
private long maxAwaitTimeMS;
7979
private long maxTimeMS;
80+
private BsonDocument variables;
8081

8182
AggregateOperationImpl(final MongoNamespace namespace, final List<BsonDocument> pipeline, final Decoder<T> decoder,
8283
final AggregationLevel aggregationLevel) {
@@ -165,6 +166,11 @@ AggregateOperationImpl<T> comment(final String comment) {
165166
return this;
166167
}
167168

169+
AggregateOperationImpl<T> let(final BsonDocument variables) {
170+
this.variables = variables;
171+
return this;
172+
}
173+
168174
AggregateOperationImpl<T> retryReads(final boolean retryReads) {
169175
this.retryReads = retryReads;
170176
return this;
@@ -233,6 +239,9 @@ BsonDocument getCommand(final SessionContext sessionContext) {
233239
if (hint != null) {
234240
commandDocument.put("hint", hint);
235241
}
242+
if (variables != null) {
243+
commandDocument.put("let", variables);
244+
}
236245

237246
return commandDocument;
238247
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ public class AggregateToCollectionOperation implements AsyncWriteOperation<Void>
7777
private Collation collation;
7878
private String comment;
7979
private BsonDocument hint;
80+
private BsonDocument variables;
8081

8182
/**
8283
* Construct a new instance.
@@ -307,6 +308,11 @@ public String getComment() {
307308
return comment;
308309
}
309310

311+
public AggregateToCollectionOperation let(final BsonDocument variables) {
312+
this.variables = variables;
313+
return this;
314+
}
315+
310316
/**
311317
* Sets the comment to the aggregation. A null value means no comment is set.
312318
*
@@ -417,6 +423,9 @@ private BsonDocument getCommand(final ConnectionDescription description) {
417423
if (hint != null) {
418424
commandDocument.put("hint", hint);
419425
}
426+
if (variables != null) {
427+
commandDocument.put("let", variables);
428+
}
420429
return commandDocument;
421430
}
422431

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -211,30 +211,32 @@ public <TResult> DistinctOperation<TResult> distinct(final String fieldName, fin
211211
public <TResult> AggregateOperation<TResult> aggregate(final List<? extends Bson> pipeline, final Class<TResult> resultClass,
212212
final long maxTimeMS, final long maxAwaitTimeMS, final Integer batchSize,
213213
final Collation collation, final Bson hint, final String comment,
214-
final Boolean allowDiskUse, final AggregationLevel aggregationLevel) {
214+
final Bson variables, final Boolean allowDiskUse,
215+
final AggregationLevel aggregationLevel) {
215216
return new AggregateOperation<TResult>(namespace, toBsonDocumentList(pipeline), codecRegistry.get(resultClass), aggregationLevel)
216217
.retryReads(retryReads)
217218
.maxTime(maxTimeMS, MILLISECONDS)
218219
.maxAwaitTime(maxAwaitTimeMS, MILLISECONDS)
219220
.allowDiskUse(allowDiskUse)
220221
.batchSize(batchSize)
221222
.collation(collation)
222-
.hint(hint == null ? null : hint.toBsonDocument(documentClass, codecRegistry))
223-
.comment(comment);
224-
223+
.hint(toBsonDocument(hint))
224+
.comment(comment)
225+
.let(toBsonDocument(variables));
225226
}
226227

227228
public AggregateToCollectionOperation aggregateToCollection(final List<? extends Bson> pipeline, final long maxTimeMS,
228229
final Boolean allowDiskUse, final Boolean bypassDocumentValidation,
229230
final Collation collation, final Bson hint, final String comment,
230-
final AggregationLevel aggregationLevel) {
231+
final Bson variables, final AggregationLevel aggregationLevel) {
231232
return new AggregateToCollectionOperation(namespace, toBsonDocumentList(pipeline), readConcern, writeConcern, aggregationLevel)
232233
.maxTime(maxTimeMS, MILLISECONDS)
233234
.allowDiskUse(allowDiskUse)
234235
.bypassDocumentValidation(bypassDocumentValidation)
235236
.collation(collation)
236-
.hint(hint == null ? null : hint.toBsonDocument(documentClass, codecRegistry))
237-
.comment(comment);
237+
.hint(toBsonDocument(hint))
238+
.comment(comment)
239+
.let(toBsonDocument(variables));
238240
}
239241

240242
public MapReduceToCollectionOperation mapReduceToCollection(final String databaseName, final String collectionName,

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,18 +114,19 @@ public <TResult> ExplainableReadOperation<BatchCursor<TResult>> aggregate(final
114114
final Integer batchSize,
115115
final Collation collation, final Bson hint,
116116
final String comment,
117+
final Bson variables,
117118
final Boolean allowDiskUse,
118119
final AggregationLevel aggregationLevel) {
119-
return operations.aggregate(pipeline, resultClass, maxTimeMS, maxAwaitTimeMS, batchSize, collation, hint, comment, allowDiskUse,
120-
aggregationLevel);
120+
return operations.aggregate(pipeline, resultClass, maxTimeMS, maxAwaitTimeMS, batchSize, collation, hint, comment, variables,
121+
allowDiskUse, aggregationLevel);
121122
}
122123

123124
public WriteOperation<Void> aggregateToCollection(final List<? extends Bson> pipeline, final long maxTimeMS,
124125
final Boolean allowDiskUse, final Boolean bypassDocumentValidation,
125126
final Collation collation, final Bson hint, final String comment,
126-
final AggregationLevel aggregationLevel) {
127+
final Bson variables, final AggregationLevel aggregationLevel) {
127128
return operations.aggregateToCollection(pipeline, maxTimeMS, allowDiskUse, bypassDocumentValidation, collation, hint, comment,
128-
aggregationLevel);
129+
variables, aggregationLevel);
129130
}
130131

131132
public WriteOperation<MapReduceStatistics> mapReduceToCollection(final String databaseName, final String collectionName,

0 commit comments

Comments
 (0)