Docs Menu
Docs Home
/ / /
PHP 라이브러리 매뉴얼
/ /

MongoDB\Collection::findOneAndUpdate()

이 페이지의 내용

  • 정의
  • 매개변수
  • Return Values
  • 오류/예외
  • 행동
  • 예시
  • 다음도 참조하세요.
MongoDB\Collection::findOneAndUpdate()

쿼리와 일치하는 단일 문서를 찾아 업데이트합니다.

function findOneAndUpdate(
array|object $filter,
array|object $update,
array $options = []
): object|null
$filter : 배열|객체
업데이트할 문서를 지정하는 필터 기준입니다.
$update : 배열|객체
업데이트할 필드 및 값 조합과 관련 업데이트 연산자를 지정합니다. $update 은(는) MongoDB의 업데이트 연산자 를 사용합니다. MongoDB 4.2 부터 집계 파이프라인 을 이 매개 변수로 전달할 수 있습니다.
$options : 배열

원하는 옵션을 지정하는 배열입니다.

이름
유형
설명
bypassDocumentValidation
부울
true인 경우 쓰기 작업이 문서 수준 유효성 검사를 우회하도록 허용합니다. 기본값은 false입니다.
배열 필터
배열

필터 문서의 배열로, 배열 필드에서의 업데이트 작업을 위해 수정할 배열 요소를 결정합니다.

버전 1.3에 새로 추가되었습니다.

데이터 정렬
배열|객체

데이터 정렬 을 통해 사용자는 string 비교를 위한 언어별 규칙(예: 대소문자 및 악센트 표시 규칙)을 지정할 수 있습니다. 데이터 정렬을 지정할 때 locale 필드는 필수입니다. 다른 모든 데이터 정렬 필드는 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.

데이터 정렬이 지정되지 않았지만 컬렉션에 기본 데이터 정렬이 있는 경우, 작업은 컬렉션에 지정된 데이터 정렬을 사용합니다. 컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다.

comment
혼합

사용자가 데이터베이스 프로파일러, currentOp 출력 및 로그를 통해 작업을 추적하는 데 도움이 되는 임의의 주석을 지정할 수 있습니다.

이 옵션은 MongoDB 4.4부터 사용할 수 있으며 이전 서버 버전에 대해 지정된 경우 실행 시 예외가 발생합니다.

버전 1.13에 새로 추가되었습니다.

hint
문자열|배열|객체

사용할 인덱스입니다. 인덱스 이름을 문자열로 지정하거나 인덱스 키 패턴을 문서로 지정합니다. 이 옵션을 지정하면 쿼리 시스템은 힌트 인덱스를 사용하는 계획만 고려합니다.

이 옵션은 MongoDB 4.4부터 사용할 수 있으며 이전 서버 버전에 대해 지정된 경우 실행 시 예외가 발생합니다.

버전 1.7에 추가 되었습니다.

최대 시간 (MS)
integer

커서에서 작업을 처리하는 데 걸리는 누적 시간 제한(밀리초)입니다. MongoDB는 중단 지점 이후 가장 빠른 시점에 작업을 중단합니다.

하자
배열|객체

매개변수 이름과 값의 맵입니다. 값은 문서 필드를 참조하지 않는 상수 또는 닫힌 표현식이어야 합니다. 그런 다음 매개변수는 애그리게이션 표현식 컨텍스트에서 변수로 액세스될 수 있습니다(예: $$var).

이는 5.0 이전의 서버 버전에서는 지원되지 않으며 사용하는 경우 실행 시 예외가 발생합니다.

버전 1.13에 새로 추가되었습니다.

프로젝션
배열|객체
반환된 문서에 포함할 필드를 결정하는 프로젝션 사양 입니다. MongoDB 매뉴얼의 쿼리에서 반환할 프로젝트 필드프로젝션 연산자 를 참조하세요.
returnDocument
integer

업데이트를 적용하기 전에 문서를 반환할지, 아니면 이후에 반환할지를 지정합니다. returnDocument 는 다음 값을 지원합니다.

  • MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_BEFORE (기본값)

  • MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER

Session

작업과 연결할 클라이언트 세션입니다.

버전 1.3에 새로 추가되었습니다.

sort
배열|객체
결과의 순서를 지정하는 정렬 사양입니다.
typeMap
배열

커서에 적용할 타입 맵으로, BSON 문서가 PHP 값으로 변환되는 방식을 결정합니다. 기본값은 컬렉션의 타입 맵입니다.

반환된 결과 문서에 사용됩니다.

업서트
부울
true로 설정하면 쿼리 기준과 일치하는 문서가 없을 때 새 문서가 만들어집니다. 기본값은 false이며, 일치하는 문서가 없을 경우 새 문서를 삽입하지 않습니다.
쓰기 고려

작업에 사용할 고려를 씁니다 . 기본값은 컬렉션의 쓰기 고려입니다.

트랜잭션의 일부로 개별 작업에 대한 쓰기 고려를 지정할 수 없습니다. 대신 트랜잭션을시작할 때 writeConcern 옵션을 설정합니다.

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 와 일치시킵니다.

다음 작업은 건물 번호를 "761" 로 설정하여 test 데이터베이스의 restaurants collection에 있는 "40361708"restaurant_id 로 레스토랑을 업데이트합니다.

<?php
$collection = (new MongoDB\Client)->test->restaurants;
$updatedRestaurant = $collection->findOneAndUpdate(
[ 'restaurant_id' => '40361708' ],
[ '$set' => [ 'address.building' => '761' ]],
[
'projection' => [ 'address' => 1 ],
'returnDocument' => MongoDB\Operation\FindOneAndUpdate::RETURN_DOCUMENT_AFTER,
]
);
var_dump($updatedRestaurant);

이 경우 출력은 다음과 유사합니다:

object(MongoDB\Model\BSONDocument)#20 (1) {
["storage":"ArrayObject":private]=>
array(2) {
["_id"]=>
object(MongoDB\BSON\ObjectId)#12 (1) {
["oid"]=>
string(24) "594d5ef280a846852a4b3dee"
}
["address"]=>
object(MongoDB\Model\BSONDocument)#19 (1) {
["storage":"ArrayObject":private]=>
array(4) {
["building"]=>
string(3) "761"
["coord"]=>
object(MongoDB\Model\BSONArray)#18 (1) {
["storage":"ArrayObject":private]=>
array(2) {
[0]=>
float(-73.9925306)
[1]=>
float(40.7309346)
}
}
["street"]=>
string(8) "Broadway"
["zipcode"]=>
string(5) "10003"
}
}
}
}

돌아가기

FindOneAndReplace()