/*
 * 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.manualtutorial/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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 &gt;= 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 &lt; 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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.manualreference/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.release3.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.release3.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.release3.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.release3.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; } }