org.mongodb.morphia.query.FindOptions Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of morphia Show documentation
Show all versions of morphia Show documentation
Java Object Document Mapper for MongoDB
The newest version!
/*
* 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
*/
public class FindOptions {
private DBCollectionFindOptions options = new DBCollectionFindOptions();
/**
* Creates an empty options instance.
*/
public FindOptions() {
}
private FindOptions(final DBCollectionFindOptions copy) {
options = copy.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.
*
* @return the limit
* @mongodb.driver.manual reference/method/cursor.limit/#cursor.limit Limit
*/
public int getLimit() {
return options.getLimit();
}
/**
* 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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @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.
*
* @return if oplog replay is enabled
*/
public boolean isOplogReplay() {
return options.isOplogReplay();
}
/**
* 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).
*
* @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).
*
* @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.
*
* @return the cursor type
*/
public CursorType getCursorType() {
return options.getCursorType();
}
/**
* 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
*
* @return the readPreference
*/
public ReadPreference getReadPreference() {
return options.getReadPreference();
}
/**
* Sets the readPreference
*
* @param readPreference the readPreference
* @return this
*/
public FindOptions readPreference(final ReadPreference readPreference) {
options.readPreference(readPreference);
return this;
}
/**
* Returns the readConcern
*
* @return the readConcern
* @mongodb.server.release 3.2
*/
public ReadConcern getReadConcern() {
return options.getReadConcern();
}
/**
* 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
*
* @return the collation options
* @mongodb.server.release 3.4
*/
public Collation getCollation() {
return options.getCollation();
}
/**
* 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;
}
}