Overview
在本指南中,您可以学习如何使用Kotlin同步驱动程序通过 updateOne() 和 updateMany() 方法更新MongoDB集合中的文档。
样本数据
本指南中的示例使用来自 Atlas 示例数据集的 sample_restaurants.restaurants 集合。要了解如何创建免费的 MongoDB 部署并加载示例数据集,请参阅 MongoDB入门指南。
此集合中的文档由以下Kotlin数据类建模:
data class Restaurant( val name: String, val borough: String, val cuisine: String, val address: Document )
更新操作
您可以使用以下方法更新MongoDB中的文档:
updateOne(),更新匹配搜索条件的第一个文档updateMany(),更新与搜索条件匹配的所有文档
每种更新方法都需要以下参数:
查询过滤,用于匹配要更新的文档。 如需学习;了解有关查询筛选器的更多信息,请参阅“指定查询”指南。
更新文档,指定更新操作符或要执行的更新类型,以及要更新的字段和值。 有关更新操作符及其用法的列表,请参阅MongoDB Server手册中的字段更新操作符指南页面。
更新一个文档
以下示例使用updateOne()方法将文档的name值从"Happy Garden"更新为"Mountain House" :
val filter = eq(Restaurant::name.name, "Happy Garden") val update = set(Restaurant::name.name, "Mountain House") val result = collection.updateOne(filter, update)
更新多个文档
以下示例使用updateMany()方法更新name值为"Starbucks"的所有文档。 此更新将address字段重命名为location 。
val filter = eq(Restaurant::name.name, "Starbucks") val update = rename(Restaurant::address.name, "location") val result = collection.updateMany(filter, update)
自定义更新操作
updateOne() 和 updateMany() 方法可以选择接受一个参数,该参数设置配置更新操作的选项。如果不指定任何选项,驱动程序将使用默认设置执行更新操作。
下表描述了可用于配置UpdateOptions实例的 setter 方法:
属性 | 说明 |
|---|---|
| |
| 设置要应用操作的排序条件。 如果多个文档与您传递给 |
| |
| 指定对结果进行排序时要使用的语言排序规则类型。 有关更多信息,请参阅 MongoDB Server 手册中的排序规则。 |
| 提供您指定的筛选器列表,用于选择更新要应用于的大量元素。 |
| |
| |
|
更新或插入文档示例
以下代码使用updateOne()方法匹配name字段值为"Sunrise Pizzeria"的文档。 然后,它将第一个匹配文档中的borough值设置为"Queens" ,并将cuisine值设置为"Italian" 。
由于 upsert 选项设立为 true,因此如果查询筛选条件与任何现有文档都不匹配,驱动程序将插入一个更新文档中指定的字段和值的新文档。
val opts = UpdateOptions().upsert(true) val filter = eq(Restaurant::name.name, "Sunrise Pizzeria") val update = combine( set(Restaurant::borough.name, "Queens"), set(Restaurant::cuisine.name, "Italian") ) collection.updateOne(filter, update, opts)
返回值
updateOne()和updateMany()方法各自返回一个UpdateResult对象。 您可以使用以下方法访问权限UpdateResult实例中的信息:
属性 | 说明 |
|---|---|
| 无论执行了多少次更新,都返回与查询过滤匹配的文档数。 |
| 返回更新操作修改的文档数。 如果更新后的文档与原始文档相同,则不计入此计数。 |
| 如果服务器确认结果,则返回 |
| 如果驱动程序执行了更新或插入,则返回在数据库中更新或插入的文档的 |
注意
如果 wasAcknowledged() 方法返回 false,则尝试从 UpdateResult实例访问权限其他信息会导致 InvalidOperation 异常。如果服务器未确认写入操作,则驱动程序无法确定这些值。
更多信息
要查看演示如何使用Kotlin同步驱动程序更新文档的可运行代码示例,请参阅插入文档。
API 文档
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: