You are on page 1of 10

 (/mongo-java-driver/4.1/..

/) Search docs 

 (https://github.com/mongodb/mongo-java-
driver/blob/master/docs/reference/content/driver/tutorials/perform-
write-operations.md)
Java Driver (/mongo-java-driver/4.1/driver/) Tutorials (/mongo-java-driver/4.1/driver/tutorials/) Write Operations

Write Operations (Insert, Update, Replace, Delete)


Perform write operations to insert new documents into a collection, update existing document or
documents in a collection, replace an existing document in a collection, or delete existing document or
documents from a collection.

Prerequisites
The example below requires a restaurants collection in the test database. To create and populate
the collection, follow the directions in github (https://github.com/mongodb/docs-assets/tree/drivers).
Include the following import statements:

import com.mongodb.*;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

import com.mongodb.client.model.UpdateOptions;
import com.mongodb.client.result.*;
import org.bson.Document;
import org.bson.types.ObjectId;

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

import static com.mongodb.client.model.Filters.*;


import static com.mongodb.client.model.Updates.*;

Connect to a MongoDB Deployment


Connect to a MongoDB deployment and declare and define a MongoDatabase instance.
For example, include the following code to connect to a standalone MongoDB deployment running on

localhost on port (/mongo-java-driver/4.1/../) Search docs
27017 and define database to refer to the test database and collection to refer to

the restaurants collection:

MongoClient mongoClient = MongoClients.create();


MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

For additional information on connecting to MongoDB, see Connect to MongoDB (/mongo-java-


driver/4.1/driver/tutorials/connect-to-mongodb/).

Insert New Document


To insert a single document into the collection, you can use the collection’s insertOne() (/mongo-java-
driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#insertOne(TDocument) ) method.

Document document = new Document("name", "Café Con Leche")


.append("contact", new Document("phone", "228-555-0149")
.append("email", "cafeconleche@example.com")
.append("location",Arrays.asList(-73.92502, 40.8279556)))
.append("stars", 3)
.append("categories", Arrays.asList("Bakery", "Coffee", "Pastries"));

collection.insertOne(document);

NOTE:

If no top-level _id field is specified in the document, the Java driver automatically adds the _id
field to the inserted document.

Insert Multiple Documents


To add multiple documents, you can use the collection’s insertMany() (/mongo-java-
driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#insertMany(java.util.List) ) method, which takes a list of
documents to insert.

The following example inserts two documents to the collection:


 Document (/mongo-java-driver/4.1/../)
doc1 = new Document("name", "Amarcord Pizzeria") Search docs 
.append("contact", new Document("phone", "264-555-0193")
.append("email", "amarcord.pizzeria@example.net")
.append("location",Arrays.asList(-73.88502, 40.749556)))
.append("stars", 2)
.append("categories", Arrays.asList("Pizzeria", "Italian", "Pasta"));

Document doc2 = new Document("name", "Blue Coffee Bar")


.append("contact", new Document("phone", "604-555-0102")
.append("email", "bluecoffeebar@example.com")
.append("location",Arrays.asList(-73.97902, 40.8479556)))
.append("stars", 5)
.append("categories", Arrays.asList("Coffee", "Pastries"));

List<Document> documents = new ArrayList<Document>();


documents.add(doc1);
documents.add(doc2);

collection.insertMany(documents);

NOTE:

If no top-level _id field is specified in the documents, the Java driver automatically adds the _id
field to the inserted documents.

Update Existing Documents


To update existing documents in a collection, you can use the collection’s updateOne() (/mongo-java-
driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#updateOne(org.bson.conversions.Bson,org.bson.conve
) or updateMany (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#updateMany(org.bson.conversions.Bson,org.bson.conve
) methods.

Filters
You can pass in a filter document to the methods to specify which documents to update. The filter
document specification is the same as for read operations (/mongo-java-
driver/4.1/driver/tutorials/perform-read-operations/). To facilitate creating filter objects, the Java driver
provides the Filters (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/Filters.html ) helper.

To specify an empty filter (i.e. match all documents in a collection), use an empty Document (/mongo-
java-driver/4.1/apidocs/bson/org/bson/Document.html ) object.
Update Operators
 (/mongo-java-driver/4.1/../)
To change a field in a document, MongoDB provides update operators
Search docs 

(http://docs.mongodb.org/manual/reference/operator/update ). To specify the modification to perform


using the update operators, use an updates document.

To facilitate the creation of updates documents, the Java driver provides the Updates (/mongo-java-
driver/4.1/apidocs/mongodb-driver-core/com/mongodb/client/model/Updates.html ) class.

IMPORTANT:

The _id field is immutable; i.e. you cannot change the value of the _id field.

Update a Single Document


The updateOne() (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#updateOne(org.bson.conversions.Bson,org.bson.conve
) method updates at most a single document, even if the filter condition matches multiple documents in
the collection.

The following operation on the restaurants collection updates a document whose _id field equals
ObjectId("57506d62f57802807471dd41") .

collection.updateOne(
eq("_id", new ObjectId("57506d62f57802807471dd41")),
combine(set("stars", 1), set("contact.phone", "228-555-9999"), currentDate("lastModifi

Specifically, the operation uses:

Updates.set (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/Updates.html#set(java.lang.String,TItem) ) to set the value of the
stars field to 1 and the contact.phone field to "228-555-9999" , and
Updates.currentDate (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/Updates.html#currentDate(java.lang.String) ) to modify the
lastModified field to the current date. If the lastModified field does not exist, the operator adds
the field to the document.

TIP:

In some cases where you may need to update many fields in a document, it may be more efficient to
replace the document. See Replace a Document.
Update Multiple Documents

The (/mongo-java-driver/4.1/../)
updateMany (/mongo-java-driver/4.1/apidocs/mongodb-driver-
Search docs 

sync/com/mongodb/client/MongoCollection.html#updateMany(org.bson.conversions.Bson,org.bson.conve
) method updates all documents that match the filter condition.

The following operation on the restaurants collection updates all documents whose stars field equals
2.

collection.updateMany(
eq("stars", 2),
combine(set("stars", 0), currentDate("lastModified")));

Specifically, the operation uses:

Updates.set (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/Updates.html#set(java.lang.String,TItem) ) to set the value of the
stars field to 0 , and
Updates.currentDate (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/Updates.html#currentDate(java.lang.String) ) to modify the
lastModified field to the current date. If the lastModified field does not exist, the operator adds
the field to the document.

Update Options
With the updateOne() (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#updateOne(org.bson.conversions.Bson,org.bson.conve
) ) and updateMany (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#updateMany(org.bson.conversions.Bson,org.bson.conve
) methods, you can include an UpdateOptions (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/UpdateOptions.html ) document to specify the upsert
(http://docs.mongodb.org/manual/reference/method/db.collection.update/#upsert-option ) option or the
bypassDocumentationValidation (http://docs.mongodb.org/manual/core/document-validation/#bypass-
document-validation ) option.

collection.updateOne(
eq("_id", 1),
combine(set("name", "Fresh Breads and Tulips"), currentDate("lastModified")),
new UpdateOptions().upsert(true).bypassDocumentValidation(true));

Replace an Existing Document


To replace an existing document in a collection, you can use the collection’s replaceOne (/mongo-java-
 (/mongo-java-driver/4.1/../)
driver/4.1/apidocs/mongodb-driver-
Search docs 

sync/com/mongodb/client/MongoCollection.html#replaceOne(org.bson.conversions.Bson,TDocument) )
method.

IMPORTANT:

The _id field is immutable; i.e. you cannot replace the _id field value.

Filters
You can pass in a filter document to the method to specify which document to replace. The filter
document specification is the same as for read operations (/mongo-java-
driver/4.1/driver/tutorials/perform-read-operations/). To facilitate creating filter objects, the Java driver
provides the Filters (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/Filters.html ) helper.

To specify an empty filter (i.e. match all documents in a collection), use an empty Document (/mongo-
java-driver/4.1/apidocs/bson/org/bson/Document.html ) object.

The replaceOne (/mongo-java-driver/4.1/apidocs/mongodb-driver-


sync/com/mongodb/client/MongoCollection.html#replaceOne(org.bson.conversions.Bson,TDocument) )
method replaces at most a single document, even if the filter condition matches multiple documents in
the collection.

Replace a Document
To replace a document, pass a new document to the replaceOne (/mongo-java-
driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#replaceOne(org.bson.conversions.Bson,TDocument) )
method.

IMPORTANT:

The replacement document can have different fields from the original document. In the replacement
document, you can omit the _id field since the _id field is immutable; however, if you do include
the _id field, you cannot specify a different value for the _id field.

The following operation on the restaurants collection replaces the document whose _id field equals
ObjectId("57506d62f57802807471dd41") .
(/mongo-java-driver/4.1/../)
 collection.replaceOne( Search docs 
eq("_id", new ObjectId("57506d62f57802807471dd41")),
new Document("name", "Green Salads Buffet")
.append("contact", "TBD")
.append("categories", Arrays.asList("Salads", "Health Foods", "Buffet")));

See also Update a Document.

Update Options
With the replaceOne (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#replaceOne(org.bson.conversions.Bson,TDocument) ),
you can include an UpdateOptions (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/UpdateOptions.html ) document to specify the upsert
(http://docs.mongodb.org/manual/reference/method/db.collection.update/#upsert-option ) option or the
bypassDocumentationValidation (http://docs.mongodb.org/manual/core/document-validation/#bypass-
document-validation ) option.

collection.replaceOne(
eq("name", "Orange Patisserie and Gelateria"),
new Document("stars", 5)
.append("contact", "TBD")
.append("categories", Arrays.asList("Cafe", "Pastries", "Ice Cream")),
new UpdateOptions().upsert(true).bypassDocumentValidation(true));

Delete Documents
To delete documents in a collection, you can use the deleteOne (/mongo-java-
driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#deleteOne(org.bson.conversions.Bson) ) and
deleteMany (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#deleteMany(org.bson.conversions.Bson) ) methods.

Filters
You can pass in a filter document to the methods to specify which documents to delete. The filter
document specification is the same as for read operations (/mongo-java-
driver/4.1/driver/tutorials/perform-read-operations/). To facilitate creating filter objects, the Java driver
provides the Filters (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/client/model/Filters.html ) helper.

To specify an empty filter (i.e. match all documents in a collection), use an empty Document (/mongo-
java-driver/4.1/apidocs/bson/org/bson/Document.html ) object.
Delete a Single Document

The (/mongo-java-driver/4.1/../)
deleteOne (/mongo-java-driver/4.1/apidocs/mongodb-driver-
Search docs 

sync/com/mongodb/client/MongoCollection.html#deleteOne(org.bson.conversions.Bson) ) method
deletes at most a single document, even if the filter condition matches multiple documents in the
collection.

The following operation on the restaurants collection deletes a document whose _id field equals
ObjectId("57506d62f57802807471dd41") .

collection.deleteOne(eq("_id", new ObjectId("57506d62f57802807471dd41")));

Delete Multiple Documents


The deleteMany (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#deleteMany(org.bson.conversions.Bson) ) method
deletes all documents that match the filter condition.

The following operation on the restaurants collection deletes all documents whose stars field equals
4.

collection.deleteMany(eq("stars", 4));

See also Drop a Collection (/mongo-java-driver/4.1/driver/tutorials/databases-collections/).

Write Concern
Write concern (http://docs.mongodb.org/manual/reference/write-concern ) describes the level of
acknowledgement requested from MongoDB for write operations.

Applications can configure write concern (http://docs.mongodb.org/manual/reference/write-concern ) at


three levels:

In a MongoClient() (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoClient.html )
Via MongoClientSettings (/mongo-java-driver/4.1/apidocs/mongodb-driver-
core/com/mongodb/MongoClientSettings.html ):
 (/mongo-java-driver/4.1/../) Search docs
MongoClient mongoClient = MongoClients.create(MongoClientSettings.builder() 
.applyConnectionString(new ConnectionString("mon
.writeConcern(WriteConcern.MAJORITY)
.build());

Via ConnectionString (/mongo-java-driver/4.1/apidocs/mongodb-driver-


core/com/mongodb/ConnectionString.html ), as in the following example:

MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017/?w=majority")

In a MongoDatabase (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoDatabase.html ) via its withWriteConcern (/mongo-java-
driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoDatabase.html#withWriteConcern(com.mongodb.WriteConcern) )
method, as in the following example:

MongoDatabase database = mongoClient.getDatabase("test").withWriteConcern(WriteConcern.MAJORITY

In a MongoCollection (/mongo-java-driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html ) via its withWriteConcern (/mongo-java-
driver/4.1/apidocs/mongodb-driver-
sync/com/mongodb/client/MongoCollection.html#withWriteConcern(com.mongodb.WriteConcern) )
method, as in the following example:

MongoCollection<Document> collection = database.getCollection("restaurants").withWriteConcern(W

MongoDatabase and MongoCollection instances are immutable. Calling .withWriteConcern() on an


existing MongoDatabase or MongoCollection instance returns a new instance and does not affect the
instance on which the method is called.

For example, in the following, the collWithWriteConcern instance has the write concern of majority
whereas the write concern of the collection is unaffected.
(/mongo-java-driver/4.1/../)
 MongoCollection<Document> collWithWriteConcern = collection Search docs 
.withWriteConcern(WriteConcern.MAJORITY);

You can build a MongoClientSettings , MongoDatabase , or MongoCollection to include a combination


of write concern, read concern (http://docs.mongodb.org/manual/reference/read-concern ), and read
preference (http://docs.mongodb.org/manual/reference/read-preference ).

For example, the following sets all three at the collection level:

collection = database.getCollection("restaurants")
.withReadPreference(ReadPreference.primary())
.withReadConcern(ReadConcern.MAJORITY)
.withWriteConcern(WriteConcern.MAJORITY);

 Client Side Encryption (/mongo-java-driver/4.1/driver/tutorials/client-side-encryption/)


Aggregation  (/mongo-java-driver/4.1/driver/tutorials/aggregation/)

You might also like