문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

replaceOne(집계)

이 페이지의 내용

  • 정의
  • 구문
  • 행동
  • 예제
$replaceOne

입력 문자열에 있는 검색 문자열의 첫 번째 인스턴스를 대체 문자열로 바꿉니다.

일치하는 항목이 없으면 $replaceOne 가 입력 string 로 평가됩니다.

$replaceOne 대/소문자를 구분하고 발음 구별 부호를 구분하며 collection에 있는 모든 데이터 정렬을 무시합니다.

$replaceOne 연산자에는 다음과 같은 연산자 표현식 구문이 있습니다.

{ $replaceOne: { input: <expression>, find: <expression>, replacement: <expression> } }
필드
설명

find를 적용할 문자열입니다. 문자열 또는 null로 해석되는 모든 유효한 표현식 일 수 있습니다. input이 누락된 필드를 참조하는 경우 $replaceOnenull을 반환합니다.

주어진 input 내에서 검색할 문자열입니다. 문자열 또는 null로 해석되는 모든 유효한 표현식 일 수 있습니다. find가 누락된 필드를 참조하는 경우 $replaceOnenull을 반환합니다.

input에서 일치하는 첫 번째 find 인스턴스를 대체하는 데 사용할 문자열입니다. 문자열 또는 null로 해석되는 모든 유효한 표현식 일 수 있습니다.

input에서 find가 발견되지 않으면 $replaceOne은 input 문자열로 평가됩니다.

input, findreplacement 표현식은 문자열 또는 null로 평가되어야 하며, 그렇지 않으면 $replaceOne이 오류가 발생하여 실패합니다.

input 또는 find가 누락된 필드를 참조하는 경우 null을 반환합니다.

input, find 또는 replacement하나null로 평가되면 전체 $replaceOne 표현식이 null로 평가됩니다.

예제
결과
{ $replaceOne: { input: null, find: "abc", replacement: "ABC" } }
null
{ $replaceOne: { input: "abc", find: null, replacement: "ABC" } }
null
{ $replaceOne: { input: "abc", find: "abc", replacement: null } }
null

문자열 일치는 모든 $replaceOne 표현식에서 항상 대소문자를 구분하고 발음 부호를 구분합니다. $replaceOne과 문자열 비교를 수행할 때 구성된 모든 데이터 정렬은 무시됩니다.

예를 들어 데이터 정렬 강도가 1인 샘플 collection을 생성합니다.

db.createCollection( "myColl", { collation: { locale: "fr", strength: 1 } } )

1의 데이터 정렬 강도는 기본 문자만 비교하고 대소문자 및 분음 부호와 같은 다른 차이점을 무시합니다.

그런 다음 세 개의 예제 문서를 삽입합니다.

db.myColl.insertMany([
{ _id: 1, name: "cafe" },
{ _id: 2, name: "Cafe" },
{ _id: 3, name: "café" }
])

다음 $replaceOne 작업은 name 필드에서 "Cafe"의 첫 번째 인스턴스를 찾아서 바꾸려고 합니다.

db.myColl.aggregate([
{
$addFields:
{
resultObject: { $replaceOne: { input: "$name", find: "Cafe", replacement: "CAFE" } }
}
}
])

$replaceOne은 이 컬렉션에 대해 구성된 데이터 정렬을 무시하므로 작업은 문서 2의 'Cafe' 인스턴스와만 일치합니다.

{ "_id" : 1, "name" : "cafe", "resultObject" : "cafe" }
{ "_id" : 2, "name" : "Cafe", "resultObject" : "CAFE" }
{ "_id" : 3, "name" : "café", "resultObject" : "café" }

$match와 같이 데이터 정렬을 존중하는 연산자는 이 컬렉션의 데이터 정렬 강도가 1이므로 'Cafe' 에 대해 문자열 비교를 수행할 때 세 문서가 모두 일치합니다.

$replaceOne 집계 표현식은 유니코드 정규화를 수행하지 않습니다. 즉, 모든 $replaceOne 표현식에 대한 string 일치는 일치를 시도할 때 유니코드로 문자를 나타내는 데 사용되는 코드 점의 수를 고려한다는 뜻입니다.

예를 들어 문자 é은(는) 한 개 또는 두 개의 코드 점을 사용하여 유니코드로 표현할 수 있습니다.

유니코드
다음과 같이 표시됩니다.
코드 포인트
\xe9
é
1 ( \xe9 )
e\u0301
é
2 ( e + \u0301 )

문자 é가 코드 점이 한 개인 유니코드로 표시되는 find 문자열에 $replaceOne을 사용하면 input 문자열에 코드 점이 두 개인 é의 인스턴스와 일치하지 않습니다.

다음 표에서는 é가 하나 또는 두 개의 코드 포인트로 표현될 경우, 'café'의 find 문자열이 input 문자열과 비교했을 때 일치 항목이 발생하는지 보여줍니다. 이 예시의 find 문자열은 é 문자를 나타낼 때 하나의 코드 포인트를 사용합니다.

예제
match
{ $replaceOne: { input: "caf\xe9", find: "café", replacement: "CAFE" } }
{ $replaceOne: { input: "cafe\u0301", find: "café", replacement: "CAFE" } }
아니

$replaceOne은 유니코드 정규화를 수행하지 않기 때문에 find 문자열과 input 문자열 모두 하나의 코드 포인트를 사용해 é를 나타내는 첫 번째 문자열 비교만 일치합니다.

다음 문서로 inventory collection을 생성합니다.

db.inventory.insertMany([
{ "_id" : 1, "item" : "blue paint" },
{ "_id" : 2, "item" : "blue and green paint" },
{ "_id" : 3, "item" : "blue paint with blue paintbrush" },
{ "_id" : 4, "item" : "blue paint with green paintbrush" },
])

다음 예시에서는 item 필드에 있는 "blue paint"의 첫 번째 인스턴스를 "red paint"로 바꿉니다.

db.inventory.aggregate([
{
$project:
{
item: { $replaceOne: { input: "$item", find: "blue paint", replacement: "red paint" } }
}
}
])

이 연산은 다음과 같은 결과를 반환합니다.

{ "_id" : 1, "item" : "red paint" }
{ "_id" : 2, "item" : "blue and green paint" }
{ "_id" : 3, "item" : "red paint with blue paintbrush" }
{ "_id" : 4, "item" : "red paint with green paintbrush" }

문서 3에서는 "blue paint"의 첫 번째 일치 인스턴스만 대체됩니다.

돌아가기

$regexMatch

다음

$replaceAll

이 페이지의 내용