MongoDB\Collection::findOneAndReplace()
定义
参数
$filter
: array|object- 指定要替换的文档的筛选条件。
$replacement
: array|object- 替换文档。
$options
: array指定所需选项的数组。
名称类型说明bypassDocumentValidation布尔如果为true
,则允许写入操作规避文档级验证。默认为false
。编解码器MongoDB\Codec\DocumentCodec排序规则数组|对象comment混合提示字符串|数组|对象要使用的索引。将索引名称指定为字符串或将索引键模式指定为文档。如果指定,查询系统将只考虑使用提示索引的计划。
自 MongoDB 4.4 起此选项可用,如果为旧服务器版本指定,则会在执行时导致异常。
版本 1.7 中的新增内容。
let数组|对象参数名称和值的映射。值必须是常量或不引用文档字段的封闭表达式。然后可以在聚合表达式上下文中将参数作为变量进行访问(例如
$$var
)。5.0 之前的服务器版本不支持此功能,如果使用,将导致执行时出现异常。
1.13 版本中的新增功能。
maxTimeMS整型处理游标操作的累计时间限制(以毫秒为单位)。MongoDB 最早会在中断点之后中止操作。
投影数组|对象returnDocument整型指定是在应用替换之前还是之后返回文档。
returnDocument
支持以下值:MongoDB\Operation\FindOneAndReplace::RETURN_DOCUMENT_BEFORE
(默认)MongoDB\Operation\FindOneAndReplace::RETURN_DOCUMENT_AFTER
会话与操作相关联的客户端会话。
1.3 版本中的新增功能。
sort数组|对象对结果排序的排序规范。typeMap阵列类型映射 应用于游标,决定如何将 BSON 文档转换为 PHP 值。默认为集合的类型映射。
这将用于返回的结果文档。
更新插入布尔如果设置为true
,则在没有文档符合查询条件时创建一个新文档。默认值为false
,在未找到匹配项时不插入新文档。writeConcern
Return Values
原始文档或替换文档的数组对象,具体取决于returnDocument
选项的指定值。 默认情况下,返回原始文档。 如果没有与查询匹配的文档,则返回null
。返回类型将取决于typeMap
选项。
错误/异常
MongoDB\Exception\UnexpectedValueException
,如果来自服务器的命令响应格式错误。
MongoDB\Exception\UnsupportedException
,如果所选服务器使用了选项但不支持选项(例如collation
、readConcern
、writeConcern
)。
MongoDB\Exception\InvalidArgumentException
用于与参数或选项解析相关的错误。
MongoDB\ 驱动程序\Exception\RuntimeException 对于扩展级别的其他错误(例如连接错误)。
行为
在评估查询条件时,MongoDB 会根据自己 的 比较规则来BSON types 比较类型和值,这不同于 的PHP 比较 和 类型杂技 规则。匹配特殊BSON类型时,查询条件应使用相应的 BSON类 在扩展(例如使用 MongoDB\ BSON\ObjectId 以匹配 ObjectId )。
示例
考虑 test
数据库的 restaurants
集合中的以下文档:
{ "_id" : ObjectId("576023c7b02fa9281da4139e"), "address" : { "building" : "977", "coord" : [ -74.06940569999999, 40.6188443 ], "street" : "Bay Street", "zipcode" : "10305" }, "borough" : "Staten Island", "cuisine" : "French", "grades" : [ { "date" : ISODate("2014-08-15T00:00:00Z"), "grade" : "A", "score" : 7 }, { "date" : ISODate("2014-02-13T00:00:00Z"), "grade" : "A", "score" : 5 }, { "date" : ISODate("2013-06-07T00:00:00Z"), "grade" : "A", "score" : 11 } ], "name" : "Zest", "restaurant_id" : "41220906" }
以下操作会将具有"41220906"
的restaurant_id
的文档替换为新文档:
$collection = (new MongoDB\Client)->teset->restaurants; $replacedRestaurant = $collection->findOneAndReplace( [ 'restaurant_id' => '41220906' ], [ 'Borough' => 'Staten Island', 'cuisine' => 'Italian', 'grades' => [], 'name' => 'Staten Island Pastaria', 'restaurant_id' => '999999999', ], [ 'returnDocument' => MongoDB\Operation\FindOneAndReplace::RETURN_DOCUMENT_AFTER ] ); var_dump($replacedRestaurant);
而输出将类似如下所示:
object(MongoDB\Model\BSONDocument)#18 (1) { ["storage":"ArrayObject":private]=> array(6) { ["_id"]=> object(MongoDB\BSON\ObjectId)#11 (1) { ["oid"]=> string(24) "594d5ef380a846852a4b5837" } ["Borough"]=> string(13) "Staten Island" ["cuisine"]=> string(7) "Italian" ["grades"]=> object(MongoDB\Model\BSONArray)#17 (1) { ["storage":"ArrayObject":private]=> array(0) { } } ["name"]=> string(22) "Staten Island Pastaria" ["restaurant_id"]=> string(9) "999999999" } }