概述
你可以使用updateOne,updateMany,replaceOne方法来更新集合中的文档。这些方法接收如下参数:
- 一个过滤器文档
- 指定修改操作的文档
- 一个可选参数(可选)
为了明确过滤器,使用相同的结构和语法作为查询条件。可以参考之前的MongoDB查询数据的文档。
你不能更新_id域
前提
这一节依然使用test数据库中restaurant集合来演示。关于导入数据集的操作,参考之前的插入数据集的文档。
我们紧接着之前博客的介绍。
需要导入下面的包:
import org.bson.Document;
import static java.util.Arrays.asList;
更新指定域
为了更新域值,MongoDB提供了update operators,例如$set来更新值。一些更新操作,例如$set,当域不存在的时候会自动创建域。更多内容可以去看update operators。
更新顶级域
下面的操作是更新文档中 name为“Juni”,用$set操作来更新cuisine
域,$currentDate来更新最后修改时间。
db.getCollection("restaurants").updateOne(
new Document("name", "Juni"),
new Document("$set",
new Document("cuisine", "American (New)"))
.append("$currentDate", new Document("lastModified", true)));
updateOne方法会返回一个包含操作信息的UpdateResult。getModifiedCount会返回文档被修改的地方的数目。
更新嵌入式文档
为了更新包含嵌入式文档的域,我们使用点记法。当使用点记法的时候,需要写入整个名称引用。以下操作是更新嵌入在address里的street域。
db.getCollection("restaurants").updateOne(
new Document("restaurant_id", "41156888"),
new Document("$set",
new Document("address.street", "East 31st Street")));
网友评论