Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
PHP 库手册
/ /

MongoDB\Collection::updateOne()

MongoDB\Collection::updateOne()

最多更新一个与过滤条件匹配的文档。如果有多个文档符合过滤条件,则只更新第一个符合条件的文档。

function updateOne(
array|object $filter,
array|object $update,
array $options = []
): MongoDB\UpdateResult
$filter : array|object
指定要更新的文档的筛选条件。
$update : array|object
指定要更新的字段和值的组合以及任何相关的更新操作符。$update 使用 MongoDB 的更新操作符。 您还可以将聚合管道作为此参数传递。
$options : array

指定所需选项的数组。

名称
类型
说明

arrayFilters

阵列

一个筛选器文档数组,确定要针对数组字段的更新操作修改哪些数组元素。

1.3 版本中的新增功能

bypassDocumentValidation

布尔

如果为 true,则允许写入操作规避文档级验证。默认为 false

排序规则

数组|对象

排序规则允许用户为string比较指定特定于语言的规则,例如字母大小写和重音符号规则。 指定排序规则时, locale字段为必填字段;所有其他排序规则字段都是可选的。 有关字段的说明,请参阅排序规则文档。

如果未指定排序规则但集合具有默认排序规则,则操作将使用为集合指定的排序规则。如果没有为集合或操作指定排序规则,MongoDB 将使用先前版本中用于字符串比较的简单二进制比较。

comment

混合

使用户可以指定任意注释来帮助通过数据库分析器currentOp 输出和日志来跟踪操作。

自 MongoDB 4.4 起此选项可用,如果为旧服务器版本指定,则会在执行时导致异常。

1.13 版本中的新增功能

提示

字符串|数组|对象

要使用的索引。将索引名称指定为字符串或将索引键模式指定为文档。如果指定,查询系统将只考虑使用提示索引的计划。

自 MongoDB 4.2 起此选项可用,如果为旧服务器版本指定,则会在执行时导致异常。

1.6 版本中的新增功能

let

数组|对象

参数名称和值的映射。值必须是常量或不引用文档字段的封闭表达式。然后可以在聚合表达式上下文中将参数作为变量进行访问(例如 $$var)。

5.0 之前的服务器版本不支持此功能,如果使用,将导致执行时出现异常。

1.13 版本中的新增功能

会话

与操作相关联的客户端会话。

1.3 版本中的新增功能

sort

数组|对象

匹配文档排序的排序规范。设置此选项可在服务器执行更新操作之前对匹配的文档应用顺序。

1.21版本新增

更新插入

布尔

如果设置为 true,则在没有文档符合查询条件时创建一个新文档。默认值为 false,在未找到匹配项时不插入新文档。

writeConcern

写关注用于操作。默认为集合的写关注。

无法将单个操作的写关注(write concern)指定为ACID 事务的一部分。相反,请在启动ACIDwriteConcern 事务时设立 选项。

一个MongoDB\UpdateResult 对象,其中封装了MongoDB\ 驱动程序\WriteResult对象。

MongoDB\Exception\UnsupportedException,如果所选服务器使用了选项但不支持选项(例如collationreadConcernwriteConcern)。

MongoDB\Exception\InvalidArgumentException 用于与参数或选项解析相关的错误。

MongoDB\ 驱动程序\Exception\BulkWriteException 以了解与写入操作相关的错误。用户应检查 getWriteResult() 返回的值,以确定错误的性质。

MongoDB\ 驱动程序\Exception\RuntimeException 用于扩展级别的其他错误(例如连接错误)。

在评估查询条件时, MongoDB会根据自己的BSON 类型比较规则来比较类型和值,这与 PHP 的比较和类型规则不同。匹配特殊BSON类型时,查询条件应使用扩展中相应的BSON类(例如,使用MongoDB\ BSON\ObjectId 来匹配 ObjectId)。

如果引发MongoDB\ 驱动程序\Exception\BulkWriteException,则用户应调用 getWriteResult() 并检查返回的MongoDB\ 驱动程序\WriteResult对象,以确定错误的性质。

例如,写入操作可能已成功应用于主服务器,但未能满足写关注(例如复制时间太长)。或者,写入操作可能完全失败(例如唯一键冲突)。

以下示例通过将 name 字段设置为 "Brunos on Astoria",来更新 restaurant_id"40356151" 的文档:

<?php
$collection = (new MongoDB\Client)->test->restaurants;
$updateResult = $collection->updateOne(
[ 'restaurant_id' => '40356151' ],
[ '$set' => [ 'name' => 'Brunos on Astoria' ]]
);
printf("Matched %d document(s)\n", $updateResult->getMatchedCount());
printf("Modified %d document(s)\n", $updateResult->getModifiedCount());

而输出将类似如下所示:

Matched 1 document(s)
Modified 1 document(s)

后退

updateMany()

在此页面上