/*
 * Copyright 2008-present 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 com.mongodb;

import org.bson.types.ObjectId;

import java.util.ArrayList;
import java.util.List;

import static com.mongodb.assertions.Assertions.isTrue;

A bulk write operation. A bulk write operation consists of an ordered or unordered collection of write requests, which can be any combination of inserts, updates, replaces, or removes.
See Also:
@mongodb.server.release2.6
@mongodb.driver.manual/reference/command/delete/ Delete
@mongodb.driver.manual/reference/command/update/ Update
@mongodb.driver.manual/reference/command/insert/ Insert
Since:2.12
/** * A bulk write operation. A bulk write operation consists of an ordered or unordered collection of write requests, * which can be any combination of inserts, updates, replaces, or removes. * * @see DBCollection#initializeOrderedBulkOperation() * @see com.mongodb.DBCollection#initializeUnorderedBulkOperation() * * @mongodb.server.release 2.6 * @mongodb.driver.manual /reference/command/delete/ Delete * @mongodb.driver.manual /reference/command/update/ Update * @mongodb.driver.manual /reference/command/insert/ Insert * @since 2.12 */
public class BulkWriteOperation { private static final String ID_FIELD_NAME = "_id"; private final boolean ordered; private final DBCollection collection; private final List<WriteRequest> requests = new ArrayList<WriteRequest>(); private Boolean bypassDocumentValidation; private boolean closed; BulkWriteOperation(final boolean ordered, final DBCollection collection) { this.ordered = ordered; this.collection = collection; }
Returns true if this is building an ordered bulk write request.
See Also:
Returns:whether this is building an ordered bulk write operation
/** * Returns true if this is building an ordered bulk write request. * * @return whether this is building an ordered bulk write operation * @see DBCollection#initializeOrderedBulkOperation() * @see DBCollection#initializeUnorderedBulkOperation() */
public boolean isOrdered() { return ordered; }
Gets whether to bypass document validation, or null if unspecified. The default is null.
Returns:whether to bypass document validation, or null if unspecified.
Since:2.14
@mongodb.server.release3.2
/** * Gets whether to bypass document validation, or null if unspecified. The default is null. * * @return whether to bypass document validation, or null if unspecified. * @since 2.14 * @mongodb.server.release 3.2 */
public Boolean getBypassDocumentValidation() { return bypassDocumentValidation; }
Sets whether to bypass document validation.
Params:
  • bypassDocumentValidation – whether to bypass document validation, or null if unspecified
Since:2.14
@mongodb.server.release3.2
/** * Sets whether to bypass document validation. * * @param bypassDocumentValidation whether to bypass document validation, or null if unspecified * @since 2.14 * @mongodb.server.release 3.2 */
public void setBypassDocumentValidation(final Boolean bypassDocumentValidation) { this.bypassDocumentValidation = bypassDocumentValidation; }
Add an insert request to the bulk operation
Params:
  • document – the document to insert
/** * Add an insert request to the bulk operation * * @param document the document to insert */
public void insert(final DBObject document) { isTrue("already executed", !closed); if (document.get(ID_FIELD_NAME) == null) { document.put(ID_FIELD_NAME, new ObjectId()); } addRequest(new InsertRequest(document, collection.getObjectCodec())); }
Start building a write request to add to the bulk write operation. The returned builder can be used to create an update, replace, or remove request with the given query.
Params:
  • query – the query for an update, replace or remove request
Returns:a builder for a single write request
/** * Start building a write request to add to the bulk write operation. The returned builder can be used to create an update, replace, * or remove request with the given query. * * @param query the query for an update, replace or remove request * @return a builder for a single write request */
public BulkWriteRequestBuilder find(final DBObject query) { isTrue("already executed", !closed); return new BulkWriteRequestBuilder(this, query, collection.getDefaultDBObjectCodec(), collection.getObjectCodec()); }
Execute the bulk write operation with the default write concern of the collection from which this came. Note that the continueOnError property of the write concern is ignored.
Throws:
Returns:the result of the bulk write operation.
/** * Execute the bulk write operation with the default write concern of the collection from which this came. Note that the * continueOnError property of the write concern is ignored. * * @return the result of the bulk write operation. * @throws com.mongodb.BulkWriteException if the write failed due some other failure specific to the write command * @throws MongoException if the operation failed for some other reason */
public BulkWriteResult execute() { isTrue("already executed", !closed); closed = true; return collection.executeBulkWriteOperation(ordered, bypassDocumentValidation, requests); }
Execute the bulk write operation with the given write concern. Note that the continueOnError property of the write concern is ignored.
Params:
  • writeConcern – the write concern to apply to the bulk operation.
Throws:
Returns:the result of the bulk write operation.
/** * Execute the bulk write operation with the given write concern. Note that the continueOnError property of the write concern is * ignored. * * @param writeConcern the write concern to apply to the bulk operation. * @return the result of the bulk write operation. * @throws com.mongodb.BulkWriteException if the write failed due some other failure specific to the write command * @throws MongoException if the operation failed for some other reason */
public BulkWriteResult execute(final WriteConcern writeConcern) { isTrue("already executed", !closed); closed = true; return collection.executeBulkWriteOperation(ordered, bypassDocumentValidation, requests, writeConcern); } void addRequest(final WriteRequest request) { isTrue("already executed", !closed); requests.add(request); } }