/*
* Copyright 2016 MongoDB, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mongodb.morphia.query;
import com.mongodb.CursorType;
import com.mongodb.DBObject;
import com.mongodb.ReadConcern;
import com.mongodb.ReadPreference;
import com.mongodb.client.model.Collation;
import com.mongodb.client.model.DBCollectionFindOptions;
import java.util.concurrent.TimeUnit;
The options to apply to a find operation (also commonly referred to as a query).
Since: 1.3 @mongodb.driver.manual tutorial/query-documents/ Find @mongodb.driver.manual ../meta-driver/latest/legacy/mongodb-wire-protocol/#op-query OP_QUERY
/**
* The options to apply to a find operation (also commonly referred to as a query).
*
* @since 1.3
* @mongodb.driver.manual tutorial/query-documents/ Find
* @mongodb.driver.manual ../meta-driver/latest/legacy/mongodb-wire-protocol/#op-query OP_QUERY
*/
public class FindOptions {
private DBCollectionFindOptions options = new DBCollectionFindOptions();
Creates an empty options instance.
/**
* Creates an empty options instance.
*/
public FindOptions() {
}
private FindOptions(final DBCollectionFindOptions copy) {
options = copy.copy();
}
Makes a copy of these find options
Returns: the new copy
/**
* Makes a copy of these find options
* @return the new copy
*/
public FindOptions copy() {
return new FindOptions(options.copy());
}
Gets the limit to apply. The default is null.
Returns: the limit @mongodb.driver.manual reference/method/cursor.limit/#cursor.limit Limit
/**
* Gets the limit to apply. The default is null.
*
* @return the limit
* @mongodb.driver.manual reference/method/cursor.limit/#cursor.limit Limit
*/
public int getLimit() {
return options.getLimit();
}
Sets the limit to apply.
Params: - limit – the limit, which may be null
Returns: this @mongodb.driver.manual reference/method/cursor.limit/#cursor.limit Limit
/**
* Sets the limit to apply.
*
* @param limit the limit, which may be null
* @return this
* @mongodb.driver.manual reference/method/cursor.limit/#cursor.limit Limit
*/
public FindOptions limit(final int limit) {
options.limit(limit);
return this;
}
Gets the number of documents to skip. The default is 0.
Returns: the number of documents to skip, which may be null @mongodb.driver.manual reference/method/cursor.skip/#cursor.skip Skip
/**
* Gets the number of documents to skip. The default is 0.
*
* @return the number of documents to skip, which may be null
* @mongodb.driver.manual reference/method/cursor.skip/#cursor.skip Skip
*/
public int getSkip() {
return options.getSkip();
}
Sets the number of documents to skip.
Params: - skip – the number of documents to skip
Returns: this @mongodb.driver.manual reference/method/cursor.skip/#cursor.skip Skip
/**
* Sets the number of documents to skip.
*
* @param skip the number of documents to skip
* @return this
* @mongodb.driver.manual reference/method/cursor.skip/#cursor.skip Skip
*/
public FindOptions skip(final int skip) {
options.skip(skip);
return this;
}
Gets the maximum execution time on the server for this operation. The default is 0, which places no limit on the execution time.
Params: - timeUnit – the time unit to return the result in
Returns: the maximum execution time in the given time unit @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
/**
* Gets the maximum execution time on the server for this operation. The default is 0, which places no limit on the execution time.
*
* @param timeUnit the time unit to return the result in
* @return the maximum execution time in the given time unit
* @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
*/
public long getMaxTime(final TimeUnit timeUnit) {
return options.getMaxTime(timeUnit);
}
Sets the maximum execution time on the server for this operation.
Params: - maxTime – the max time
- timeUnit – the time unit, which may not be null
Returns: this @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
/**
* Sets the maximum execution time on the server for this operation.
*
* @param maxTime the max time
* @param timeUnit the time unit, which may not be null
* @return this
* @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
*/
public FindOptions maxTime(final long maxTime, final TimeUnit timeUnit) {
options.maxTime(maxTime, timeUnit);
return this;
}
The maximum amount of time for the server to wait on new documents to satisfy a tailable cursor
query. This only applies to a TAILABLE_AWAIT cursor. When the cursor is not a TAILABLE_AWAIT cursor,
this option is ignored.
On servers >= 3.2, this option will be specified on the getMore command as "maxTimeMS". The default
is no value: no "maxTimeMS" is sent to the server with the getMore command.
On servers < 3.2, this option is ignored, and indicates that the driver should respect the server's default value
A zero value will be ignored.
Params: - timeUnit – the time unit to return the result in
Returns: the maximum await execution time in the given time unit @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
/**
* The maximum amount of time for the server to wait on new documents to satisfy a tailable cursor
* query. This only applies to a TAILABLE_AWAIT cursor. When the cursor is not a TAILABLE_AWAIT cursor,
* this option is ignored.
*
* On servers >= 3.2, this option will be specified on the getMore command as "maxTimeMS". The default
* is no value: no "maxTimeMS" is sent to the server with the getMore command.
*
* On servers < 3.2, this option is ignored, and indicates that the driver should respect the server's default value
*
* A zero value will be ignored.
*
* @param timeUnit the time unit to return the result in
* @return the maximum await execution time in the given time unit
* @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
*/
public long getMaxAwaitTime(final TimeUnit timeUnit) {
return options.getMaxAwaitTime(timeUnit);
}
Sets the maximum await execution time on the server for this operation.
Params: - maxAwaitTime – the max await time. A zero value will be ignored, and indicates that the driver should respect the server's
default value
- timeUnit – the time unit, which may not be null
Returns: this @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
/**
* Sets the maximum await execution time on the server for this operation.
*
* @param maxAwaitTime the max await time. A zero value will be ignored, and indicates that the driver should respect the server's
* default value
* @param timeUnit the time unit, which may not be null
* @return this
* @mongodb.driver.manual reference/method/cursor.maxTimeMS/#cursor.maxTimeMS Max Time
*/
public FindOptions maxAwaitTime(final long maxAwaitTime, final TimeUnit timeUnit) {
options.maxAwaitTime(maxAwaitTime, timeUnit);
return this;
}
Gets the number of documents to return per batch. Default to 0, which indicates that the server chooses an appropriate batch
size.
Returns: the batch size, which may be null @mongodb.driver.manual reference/method/cursor.batchSize/#cursor.batchSize Batch Size
/**
* Gets the number of documents to return per batch. Default to 0, which indicates that the server chooses an appropriate batch
* size.
*
* @return the batch size, which may be null
* @mongodb.driver.manual reference/method/cursor.batchSize/#cursor.batchSize Batch Size
*/
public int getBatchSize() {
return options.getBatchSize();
}
Sets the number of documents to return per batch.
Params: - batchSize – the batch size
Returns: this @mongodb.driver.manual reference/method/cursor.batchSize/#cursor.batchSize Batch Size
/**
* Sets the number of documents to return per batch.
*
* @param batchSize the batch size
* @return this
* @mongodb.driver.manual reference/method/cursor.batchSize/#cursor.batchSize Batch Size
*/
public FindOptions batchSize(final int batchSize) {
options.batchSize(batchSize);
return this;
}
Gets the query modifiers to apply to this operation. The default is not to apply any modifiers.
Returns: the query modifiers, which may be null @mongodb.driver.manual reference/operator/query-modifier/ Query Modifiers
/**
* Gets the query modifiers to apply to this operation. The default is not to apply any modifiers.
*
* @return the query modifiers, which may be null
* @mongodb.driver.manual reference/operator/query-modifier/ Query Modifiers
*/
DBObject getModifiers() {
return options.getModifiers();
}
Adds a modifier to the find operation
Params: - key – the modifier name
- value – the modifier value
Returns: this
/**
* Adds a modifier to the find operation
*
* @param key the modifier name
* @param value the modifier value
* @return this
*/
public FindOptions modifier(final String key, final Object value) {
options.getModifiers().put(key, value);
return this;
}
Gets a document describing the fields to return for all matching documents.
Returns: the project document, which may be null @mongodb.driver.manual reference/method/db.collection.find/ Projection
/**
* Gets a document describing the fields to return for all matching documents.
*
* @return the project document, which may be null
* @mongodb.driver.manual reference/method/db.collection.find/ Projection
*/
DBObject getProjection() {
return options.getProjection();
}
Sets a document describing the fields to return for all matching documents.
Params: - projection – the project document, which may be null.
Returns: this @mongodb.driver.manual reference/method/db.collection.find/ Projection
/**
* Sets a document describing the fields to return for all matching documents.
*
* @param projection the project document, which may be null.
* @return this
* @mongodb.driver.manual reference/method/db.collection.find/ Projection
*/
FindOptions projection(final DBObject projection) {
options.projection(projection);
return this;
}
Gets the sort criteria to apply to the query. The default is null, which means that the documents will be returned in an undefined
order.
Returns: a document describing the sort criteria @mongodb.driver.manual reference/method/cursor.sort/ Sort
/**
* Gets the sort criteria to apply to the query. The default is null, which means that the documents will be returned in an undefined
* order.
*
* @return a document describing the sort criteria
* @mongodb.driver.manual reference/method/cursor.sort/ Sort
*/
DBObject getSortDBObject() {
return options.getSort();
}
Sets the sort criteria to apply to the query.
Params: - sort – the sort criteria, which may be null.
Returns: this @mongodb.driver.manual reference/method/cursor.sort/ Sort
/**
* Sets the sort criteria to apply to the query.
*
* @param sort the sort criteria, which may be null.
* @return this
* @mongodb.driver.manual reference/method/cursor.sort/ Sort
*/
FindOptions sort(final DBObject sort) {
options.sort(sort);
return this;
}
The server normally times out idle cursors after an inactivity period (10 minutes)
to prevent excess memory use. If true, that timeout is disabled.
Returns: true if cursor timeout is disabled
/**
* The server normally times out idle cursors after an inactivity period (10 minutes)
* to prevent excess memory use. If true, that timeout is disabled.
*
* @return true if cursor timeout is disabled
*/
public boolean isNoCursorTimeout() {
return options.isNoCursorTimeout();
}
The server normally times out idle cursors after an inactivity period (10 minutes)
to prevent excess memory use. Set this option to prevent that.
Params: - noCursorTimeout – true if cursor timeout is disabled
Returns: this
/**
* The server normally times out idle cursors after an inactivity period (10 minutes)
* to prevent excess memory use. Set this option to prevent that.
*
* @param noCursorTimeout true if cursor timeout is disabled
* @return this
*/
public FindOptions noCursorTimeout(final boolean noCursorTimeout) {
options.noCursorTimeout(noCursorTimeout);
return this;
}
Users should not set this under normal circumstances.
Returns: if oplog replay is enabled
/**
* Users should not set this under normal circumstances.
*
* @return if oplog replay is enabled
*/
public boolean isOplogReplay() {
return options.isOplogReplay();
}
Users should not set this under normal circumstances.
Params: - oplogReplay – if oplog replay is enabled
Returns: this
/**
* Users should not set this under normal circumstances.
*
* @param oplogReplay if oplog replay is enabled
* @return this
*/
public FindOptions oplogReplay(final boolean oplogReplay) {
options.oplogReplay(oplogReplay);
return this;
}
Get partial results from a sharded cluster if one or more shards are unreachable (instead of throwing an error).
Returns: if partial results for sharded clusters is enabled
/**
* Get partial results from a sharded cluster if one or more shards are unreachable (instead of throwing an error).
*
* @return if partial results for sharded clusters is enabled
*/
public boolean isPartial() {
return options.isPartial();
}
Get partial results from a sharded cluster if one or more shards are unreachable (instead of throwing an error).
Params: - partial – if partial results for sharded clusters is enabled
Returns: this
/**
* Get partial results from a sharded cluster if one or more shards are unreachable (instead of throwing an error).
*
* @param partial if partial results for sharded clusters is enabled
* @return this
*/
public FindOptions partial(final boolean partial) {
options.partial(partial);
return this;
}
Get the cursor type.
Returns: the cursor type
/**
* Get the cursor type.
*
* @return the cursor type
*/
public CursorType getCursorType() {
return options.getCursorType();
}
Sets the cursor type.
Params: - cursorType – the cursor type
Returns: this
/**
* Sets the cursor type.
*
* @param cursorType the cursor type
* @return this
*/
public FindOptions cursorType(final CursorType cursorType) {
options.cursorType(cursorType);
return this;
}
Returns the readPreference
Returns: the readPreference
/**
* Returns the readPreference
*
* @return the readPreference
*/
public ReadPreference getReadPreference() {
return options.getReadPreference();
}
Sets the readPreference
Params: - readPreference – the readPreference
Returns: this
/**
* Sets the readPreference
*
* @param readPreference the readPreference
* @return this
*/
public FindOptions readPreference(final ReadPreference readPreference) {
options.readPreference(readPreference);
return this;
}
Returns the readConcern
Returns: the readConcern @mongodb.server.release 3.2
/**
* Returns the readConcern
*
* @return the readConcern
* @mongodb.server.release 3.2
*/
public ReadConcern getReadConcern() {
return options.getReadConcern();
}
Sets the readConcern
Params: - readConcern – the readConcern
Returns: this @mongodb.server.release 3.2
/**
* Sets the readConcern
*
* @param readConcern the readConcern
* @return this
* @mongodb.server.release 3.2
*/
public FindOptions readConcern(final ReadConcern readConcern) {
options.readConcern(readConcern);
return this;
}
Returns the collation options
Returns: the collation options @mongodb.server.release 3.4
/**
* Returns the collation options
*
* @return the collation options
* @mongodb.server.release 3.4
*/
public Collation getCollation() {
return options.getCollation();
}
Sets the collation
Params: - collation – the collation
Returns: this @mongodb.server.release 3.4
/**
* Sets the collation
*
* @param collation the collation
* @return this
* @mongodb.server.release 3.4
*/
public FindOptions collation(final Collation collation) {
options.collation(collation);
return this;
}
DBCollectionFindOptions getOptions() {
return options;
}
boolean isSnapshot() {
Object snapshot = getModifiers().get("$snapshot");
return snapshot != null ? (Boolean) snapshot : false;
}
boolean hasHint() {
return getModifiers().get("$indexHint") != null;
}
}