Overview
You can use the updateOne method, updateMany method, and replaceOne method to update documents of a collection. The methods accept the following parameters:
To specify the filter, use the same structure and syntax as the query conditions. See Find or Query Data with Java Driver for an introduction to query conditions. However, you cannot update the _id field.
Prerequisites
The examples in this section use the restaurants collection in the test database. For instructions on populating the collection with the sample dataset, see Import Example Dataset. Follow the Connect to MongoDB step to connect to a running MongoDB instance and declare and define the variable db to access the test database. To begin, including the following import statements.
- import org.bson.Document;
- import static java.util.Arrays.asList;
To change a field value, MongoDB provides update operators, such as $set to modify values. Some update operators, such as $set, will create the field if the field does not exist. See the individual update operators reference.
Update Top-Level Fields
The following operation updates the first document with name equal to "Juni", using the $set operator to update the cuisine field and the $currentDate operator to update the lastModified field with the current date.
- db.getCollection("restaurants").updateOne(new Document("name", "Juni"),
- new Document("$set", new Document("cuisine", "American (New)"))
- .append("$currentDate", new Document("lastModified", true)));
Update an Embedded Field
To update a field within an embedded document, use the dot notation. When using the dot notation, enclose the whole dotted field name in quotes. The following updates the street field in the embedded address document.
- db.getCollection("restaurants").updateOne(new Document("restaurant_id", "41156888"),
- new Document("$set", new Document("address.street", "East 31st Street")));
To update multiple documents, use the updateMany method. The following operation updates all documents that have address.zipcode field equal to "10016" and cuisine field equal to "Other", setting the cuisine field to "Category To Be Determined" and the lastModified field to the current date.
- db.getCollection("restaurants").updateMany(new Document("address.zipcode", "10016").append("cuisine", "Other"),
- new Document("$set", new Document("cuisine", "Category To Be Determined"))
- .append("$currentDate", new Document("lastModified", true)));
Replace a Document
To replace the entire document except for the _id field, pass an entirely new document as the second argument to the replaceOne method. 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. If you do include the _id field, it must be the same value as the existing value.
Important.
After the following update, the modified document will only contain the _id field, name field, the address field. i.e. the document will not contain the restaurant_id, cuisine, grades, and the borough fields.
- db.getCollection("restaurants").replaceOne(new Document("restaurant_id", "41704620"),
- new Document("address",
- new Document()
- .append("street", "2 Avenue")
- .append("zipcode", "10075")
- .append("building", "1480")
- .append("coord", asList(-73.9557413, 40.7720266)))
- .append("name", "Vella 2"));
Additional Information
If no document matches the update condition, the default behavior of the update method is to do nothing. By specifying the upsert option to true, the update operation either updates matching document(s) or inserts a new document if no matching document exists. In the Java Driver documentation, see updateOne, updateMany, and replaceOne as well as updateOptions.
In MongoDB, write operations are atomic on the level of a single document. If a single update operation modifies multiple documents of a collection, the operation can interleave with other write operations on that collection. In the MongoDB Manual, see Atomicity. For all available update operators, see the Update Operators reference page in the MongoDB Manual.
Supplement
* Getting Started - Find and Query Data with Java Driver
* Getting Started - Remove Data with Java Driver
沒有留言:
張貼留言