Skip to content

Commit e5fb2de

Browse files
committed
Criteria now required for Find and Count
JAVA-1492
1 parent 3b7e3cc commit e5fb2de

File tree

15 files changed

+134
-127
lines changed

15 files changed

+134
-127
lines changed

driver-async/src/main/com/mongodb/async/client/MongoCollectionImpl.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ <V> MongoFuture<V> execute(final AsyncReadOperation<V> readOperation, final Read
144144
private class MongoCollectionView implements MongoView<T> {
145145
private final FindOptions findOptions = new FindOptions();
146146
private final ReadPreference readPreference = options.getReadPreference();
147+
private BsonDocument criteria;
147148
private boolean upsert;
148149

149150
@Override
@@ -181,7 +182,7 @@ public void onResult(final Void result, final MongoException e) {
181182
@Override
182183
public MongoFuture<Long> count() {
183184
CountOperation operation = new CountOperation(getNamespace())
184-
.criteria((BsonDocument) findOptions.getCriteria())
185+
.criteria(criteria)
185186
.skip(findOptions.getSkip())
186187
.limit(findOptions.getLimit())
187188
.maxTime(findOptions.getMaxTime(MILLISECONDS), MILLISECONDS);
@@ -190,7 +191,7 @@ public MongoFuture<Long> count() {
190191

191192
@Override
192193
public MongoView<T> find(final Document filter) {
193-
findOptions.criteria(new BsonDocumentWrapper<Document>(filter, options.getDocumentCodec()));
194+
criteria = new BsonDocumentWrapper<Document>(filter, options.getDocumentCodec());
194195
return this;
195196
}
196197

@@ -200,13 +201,13 @@ public MongoView<T> find(final ConvertibleToDocument filter) {
200201
}
201202

202203
MongoView<T> find(final BsonDocument filter) {
203-
findOptions.criteria(filter);
204+
criteria = filter;
204205
return this;
205206
}
206207

207208
@Override
208209
public MongoView<T> sort(final Document sortCriteria) {
209-
findOptions.sort(new BsonDocumentWrapper<Document>(sortCriteria, options.getDocumentCodec()));
210+
findOptions.sort(asBson(sortCriteria));
210211
return this;
211212
}
212213

@@ -307,8 +308,7 @@ public <U> MongoIterable<U> map(final Function<T, U> mapper) {
307308
public MongoFuture<WriteResult> replace(final T replacement) {
308309
notNull("replacement", replacement);
309310
return execute(new UpdateOperation(getNamespace(), true, options.getWriteConcern(),
310-
asList(new UpdateRequest((BsonDocument) findOptions.getCriteria(),
311-
asBson(replacement), WriteRequest.Type.REPLACE)
311+
asList(new UpdateRequest(criteria, asBson(replacement), WriteRequest.Type.REPLACE)
312312
.upsert(upsert))
313313
));
314314
}
@@ -317,19 +317,19 @@ public MongoFuture<WriteResult> replace(final T replacement) {
317317
public MongoFuture<WriteResult> update(final Document updateOperations) {
318318
notNull("updateOperations", updateOperations);
319319
return execute(new UpdateOperation(getNamespace(), true, options.getWriteConcern(),
320-
asList(new UpdateRequest((BsonDocument) findOptions.getCriteria(),
320+
asList(new UpdateRequest(criteria,
321321
new BsonDocumentWrapper<Document>(updateOperations,
322322
options.getDocumentCodec()),
323323
WriteRequest.Type.UPDATE)
324-
.upsert(upsert).multi(true))
324+
.upsert(upsert).multi(true))
325325
));
326326
}
327327

328328
@Override
329329
public MongoFuture<WriteResult> updateOne(final Document updateOperations) {
330330
notNull("updateOperations", updateOperations);
331331
return execute(new UpdateOperation(getNamespace(), true, options.getWriteConcern(),
332-
asList(new UpdateRequest((BsonDocument) findOptions.getCriteria(),
332+
asList(new UpdateRequest(criteria,
333333
new BsonDocumentWrapper<Document>(updateOperations,
334334
options.getDocumentCodec()),
335335
WriteRequest.Type.UPDATE)
@@ -340,20 +340,18 @@ public MongoFuture<WriteResult> updateOne(final Document updateOperations) {
340340
@Override
341341
public MongoFuture<WriteResult> remove() {
342342
return execute(new DeleteOperation(getNamespace(), true, options.getWriteConcern(),
343-
asList(new DeleteRequest((BsonDocument) findOptions.getCriteria())
344-
.multi(true))));
343+
asList(new DeleteRequest(criteria).multi(true))));
345344
}
346345

347346
@Override
348347
public MongoFuture<WriteResult> removeOne() {
349348
return execute(new DeleteOperation(getNamespace(), true, options.getWriteConcern(),
350-
asList(new DeleteRequest((BsonDocument) findOptions.getCriteria())
351-
.multi(false))));
349+
asList(new DeleteRequest(criteria).multi(false))));
352350
}
353351

354352
private FindOperation<T> createQueryOperation() {
355353
return new FindOperation<T>(getNamespace(), getCodec())
356-
.criteria(asBson(findOptions.getCriteria()))
354+
.criteria(criteria)
357355
.batchSize(findOptions.getBatchSize())
358356
.skip(findOptions.getSkip())
359357
.limit(findOptions.getLimit())

driver-core/src/main/com/mongodb/client/model/CountOptions.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,35 +27,12 @@
2727
* @mongodb.driver.manual manual/reference/command/count/ Count
2828
*/
2929
public class CountOptions {
30-
private Object criteria;
3130
private Object hint;
3231
private String hintString;
3332
private long limit;
3433
private long maxTimeMS;
3534
private long skip;
3635

37-
/**
38-
* Gets the query criteria.
39-
*
40-
* @return the query criteria
41-
* @mongodb.driver.manual manual/reference/method/db.collection.find/ Criteria
42-
*/
43-
public Object getCriteria() {
44-
return criteria;
45-
}
46-
47-
/**
48-
* Sets the criteria to apply to the query.
49-
*
50-
* @param criteria the criteria, which may be null.
51-
* @return this
52-
* @mongodb.driver.manual manual/reference/method/db.collection.find/ Criteria
53-
*/
54-
public CountOptions criteria(final Object criteria) {
55-
this.criteria = criteria;
56-
return this;
57-
}
58-
5936
/**
6037
* Gets the hint to apply.
6138
*

driver-core/src/main/com/mongodb/client/model/FindOptions.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
* @mongodb.driver.manual meta-driver/latest/legacy/mongodb-wire-protocol/#op-query OP_QUERY
2929
*/
3030
public final class FindOptions {
31-
private Object criteria;
3231
private int batchSize;
3332
private int limit;
3433
private Object modifiers;
@@ -54,7 +53,6 @@ public FindOptions() {
5453
* @param from model to copy
5554
*/
5655
public FindOptions(final FindOptions from) {
57-
criteria = from.criteria;
5856
batchSize = from.batchSize;
5957
limit = from.limit;
6058
modifiers = from.modifiers;
@@ -70,28 +68,6 @@ public FindOptions(final FindOptions from) {
7068
tailable = from.tailable;
7169
}
7270

73-
/**
74-
* Sets the criteria to apply to the query.
75-
*
76-
* @param criteria the criteria, which may be null.
77-
* @return this
78-
* @mongodb.driver.manual manual/reference/method/db.collection.find/ Criteria
79-
*/
80-
public FindOptions criteria(final Object criteria) {
81-
this.criteria = criteria;
82-
return this;
83-
}
84-
85-
/**
86-
* Gets the query criteria.
87-
*
88-
* @return the query criteria
89-
* @mongodb.driver.manual manual/reference/method/db.collection.find/ Criteria
90-
*/
91-
public Object getCriteria() {
92-
return criteria;
93-
}
94-
9571
/**
9672
* Gets the limit to apply. The default is null.
9773
*
@@ -392,7 +368,6 @@ public FindOptions tailable(final boolean tailable) {
392368
@Override
393369
public String toString() {
394370
return "FindOptions{"
395-
+ "criteria=" + criteria
396371
+ ", batchSize=" + batchSize
397372
+ ", limit=" + limit
398373
+ ", modifiers=" + modifiers

driver/src/main/com/mongodb/DBCollection.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -690,13 +690,16 @@ public DBObject findOne(final DBObject query, final DBObject projection, final D
690690
*/
691691
DBObject findOne(final DBObject query, final DBObject projection, final DBObject sort,
692692
final ReadPreference readPreference, final long maxTime, final TimeUnit maxTimeUnit) {
693-
FindOperation<DBObject> findOperation = new FindOperation<DBObject>(getNamespace(), objectCodec)
694-
.criteria(wrapAllowNull(query))
693+
FindOperation<DBObject> operation = new FindOperation<DBObject>(getNamespace(),
694+
objectCodec)
695695
.projection(wrapAllowNull(projection))
696696
.sort(wrapAllowNull(sort))
697697
.batchSize(-1)
698698
.maxTime(maxTime, maxTimeUnit);
699-
MongoCursor<DBObject> cursor = executor.execute(findOperation, readPreference);
699+
if (query != null) {
700+
operation.criteria(wrap(query));
701+
}
702+
MongoCursor<DBObject> cursor = executor.execute(operation, readPreference);
700703
return cursor.hasNext() ? cursor.next() : null;
701704
}
702705

@@ -910,11 +913,13 @@ long getCount(final DBObject query, final DBObject projection, final long limit,
910913
}
911914

912915
CountOperation operation = new CountOperation(getNamespace())
913-
.criteria(wrapAllowNull(query))
914916
.hint(hint)
915917
.skip(skip)
916918
.limit(limit)
917919
.maxTime(maxTime, maxTimeUnit);
920+
if (query != null) {
921+
operation.criteria(wrap(query));
922+
}
918923
return executor.execute(operation, readPreference);
919924
}
920925

driver/src/main/com/mongodb/DBCursor.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
public class DBCursor implements Cursor, Iterable<DBObject> {
6161
private final DBCollection collection;
6262
private final OperationExecutor executor;
63+
private final BsonDocument criteria;
6364
private final FindOptions findOptions;
6465
private int options;
6566
private ReadPreference readPreference;
@@ -85,10 +86,9 @@ public class DBCursor implements Cursor, Iterable<DBObject> {
8586
* @param readPreference the read preference for this query
8687
*/
8788
public DBCursor(final DBCollection collection, final DBObject query, final DBObject fields, final ReadPreference readPreference) {
88-
this(collection, collection.getExecutor(),
89+
this(collection, collection.getExecutor(), collection.wrapAllowNull(query),
8990
new FindOptions()
9091
.modifiers(new BsonDocument())
91-
.criteria(collection.wrapAllowNull(query))
9292
.projection(collection.wrapAllowNull(fields)),
9393
readPreference);
9494

@@ -100,13 +100,15 @@ public DBCursor(final DBCollection collection, final DBObject query, final DBObj
100100
}
101101
}
102102

103-
private DBCursor(final DBCollection collection, final OperationExecutor executor, final FindOptions findOptions,
103+
private DBCursor(final DBCollection collection, final OperationExecutor executor, final BsonDocument criteria,
104+
final FindOptions findOptions,
104105
final ReadPreference readPreference) {
105106
if (collection == null) {
106107
throw new IllegalArgumentException("Collection can't be null");
107108
}
108109
this.collection = collection;
109110
this.executor = executor;
111+
this.criteria = criteria;
110112
this.findOptions = findOptions;
111113
this.readPreference = readPreference;
112114
this.resultDecoder = collection.getObjectCodec();
@@ -121,7 +123,7 @@ private DBCursor(final DBCollection collection, final OperationExecutor executor
121123
* @return the new cursor
122124
*/
123125
public DBCursor copy() {
124-
return new DBCursor(collection, executor, new FindOptions(findOptions), readPreference);
126+
return new DBCursor(collection, executor, criteria, new FindOptions(findOptions), readPreference);
125127
}
126128

127129
/**
@@ -452,7 +454,6 @@ public DBObject explain() {
452454

453455
private FindOperation<DBObject> getQueryOperation(final FindOptions options, final Decoder<DBObject> decoder) {
454456
FindOperation<DBObject> operation = new FindOperation<DBObject>(collection.getNamespace(), decoder)
455-
.criteria((BsonDocument) options.getCriteria())
456457
.batchSize(options.getBatchSize())
457458
.limit(options.getLimit())
458459
.maxTime(options.getMaxTime(MILLISECONDS), MILLISECONDS)
@@ -485,6 +486,9 @@ private FindOperation<DBObject> getQueryOperation(final FindOptions options, fin
485486
if ((this.options & Bytes.QUERYOPTION_PARTIAL) != 0) {
486487
operation.partial(true);
487488
}
489+
if (criteria != null) {
490+
operation.criteria(criteria);
491+
}
488492
return operation;
489493
}
490494

@@ -707,7 +711,7 @@ public DBObject getKeysWanted() {
707711
* @return the query that cursor used
708712
*/
709713
public DBObject getQuery() {
710-
return DBObjects.toDBObject((BsonDocument) findOptions.getCriteria());
714+
return DBObjects.toDBObject(criteria);
711715
}
712716

713717
/**

driver/src/main/com/mongodb/MongoCollectionImpl.java

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,18 @@ public MongoCollectionOptions getOptions() {
118118

119119
@Override
120120
public long count() {
121-
return count(new CountOptions());
121+
return count(new Document(), new CountOptions());
122122
}
123123

124124
@Override
125-
public long count(final CountOptions options) {
125+
public long count(final Object criteria) {
126+
return count(criteria, new CountOptions());
127+
}
128+
129+
@Override
130+
public long count(final Object criteria, final CountOptions options) {
126131
CountOperation operation = new CountOperation(namespace)
127-
.criteria(asBson(options.getCriteria()))
132+
.criteria(asBson(criteria))
128133
.skip(options.getSkip())
129134
.limit(options.getLimit())
130135
.maxTime(options.getMaxTime(MILLISECONDS), MILLISECONDS);
@@ -160,22 +165,33 @@ public List<Object> distinct(final String fieldName, final DistinctOptions disti
160165

161166
@Override
162167
public MongoIterable<T> find() {
163-
return find(new FindOptions());
168+
return find(new Document(), new FindOptions());
164169
}
165170

166171
@Override
167172
public <C> MongoIterable<C> find(final Class<C> clazz) {
168-
return find(new FindOptions(), clazz);
173+
return find(new Document(), new FindOptions(), clazz);
174+
}
175+
176+
@Override
177+
public MongoIterable<T> find(final Object criteria) {
178+
return find(criteria, new FindOptions());
179+
}
180+
181+
@Override
182+
public <C> MongoIterable<C> find(final Object criteria, final Class<C> clazz) {
183+
return find(criteria, new FindOptions(), clazz);
169184
}
170185

171186
@Override
172-
public MongoIterable<T> find(final FindOptions findOptions) {
173-
return find(findOptions, clazz);
187+
public MongoIterable<T> find(final Object criteria, final FindOptions findOptions) {
188+
return find(criteria, findOptions, clazz);
174189
}
175190

176191
@Override
177-
public <C> MongoIterable<C> find(final FindOptions findOptions, final Class<C> clazz) {
178-
return new OperationIterable<C>(createQueryOperation(namespace, findOptions, getCodec(clazz)), options.getReadPreference());
192+
public <C> MongoIterable<C> find(final Object criteria, final FindOptions findOptions, final Class<C> clazz) {
193+
return new OperationIterable<C>(createQueryOperation(namespace, criteria, findOptions, getCodec(clazz)),
194+
options.getReadPreference());
179195
}
180196

181197
@Override
@@ -276,10 +292,9 @@ public <C> MongoIterable<C> mapReduce(final String mapFunction, final String red
276292
}
277293
executor.execute(operation);
278294

279-
String databaseName = options.getDatabaseName() != null ? options.getDatabaseName()
280-
: namespace.getDatabaseName();
295+
String databaseName = options.getDatabaseName() != null ? options.getDatabaseName() : namespace.getDatabaseName();
281296
FindOperation<C> findOperation = createQueryOperation(new MongoNamespace(databaseName, options.getCollectionName()),
282-
new FindOptions(), getCodec(clazz));
297+
new Document(), new FindOptions(), getCodec(clazz));
283298
return new OperationIterable<C>(findOperation, this.options.getReadPreference());
284299
}
285300
}
@@ -587,9 +602,10 @@ private BsonDocument asBson(final Object document) {
587602
}
588603
}
589604

590-
private <C> FindOperation<C> createQueryOperation(final MongoNamespace namespace, final FindOptions options, final Decoder<C> decoder) {
605+
private <C> FindOperation<C> createQueryOperation(final MongoNamespace namespace, final Object criteria, final FindOptions options,
606+
final Decoder<C> decoder) {
591607
return new FindOperation<C>(namespace, decoder)
592-
.criteria(asBson(options.getCriteria()))
608+
.criteria(asBson(criteria))
593609
.batchSize(options.getBatchSize())
594610
.skip(options.getSkip())
595611
.limit(options.getLimit())

0 commit comments

Comments
 (0)