Azure Cosmos DB for MongoDB(4.0 서버 버전): 지원되는 기능 및 구문

적용 대상: MongoDB

Azure Cosmos DB는 Microsoft의 세계적으로 유통된 멀티 모델 데이터베이스 서비스입니다. 오픈 소스 MongoDB 클라이언트 드라이버를 사용하여 Azure Cosmos DB for MongoDB와 통신할 수 있습니다. Azure Cosmos DB for MongoDB를 사용하면 MongoDB 유선 프로토콜에 따라 기존 클라이언트 드라이버를 사용할 수 있습니다.

Azure Cosmos DB for MongoDB를 사용하면 Azure Cosmos DB가 제공하는 모든 엔터프라이즈 기능과 함께 익숙한 MongoDB의 이점을 누릴 수 있습니다. 이러한 기능에는 글로벌 배포, 자동 분할, 가용성 및 대기 시간 보장, 미사용 암호화, 백업 등이 포함됩니다.

프로토콜 지원

지원되는 연산자 및 제한 사항이나 예외는 다음과 같습니다. 이러한 프로토콜을 인식하는 모든 클라이언트 드라이버는 Azure Cosmos DB for MongoDB에 연결할 수 있습니다. Azure Cosmos DB for MongoDB 계정을 만들 때 3.6 버전 이상의 계정에는 *.mongo.cosmos.azure.com 형식의 엔드포인트가 있지만 3.2 버전의 계정에는 *.documents.azure.com 형식의 엔드포인트가 있습니다.

참고 항목

이 문서에서는 지원되는 서버 명령만 나열하고 클라이언트 쪽 래퍼 함수는 제외합니다. deleteMany()updateMany()와 같은 클라이언트 쪽 래퍼 함수는 내부적으로 delete()update() 서버 명령을 활용합니다. 지원되는 서버 명령을 활용하는 함수는 Azure Cosmos DB for MongoDB와 호환됩니다.

쿼리 언어 지원

Azure Cosmos DB for MongoDB는 MongoDB 쿼리 언어 구문을 포괄적으로 지원합니다. 아래에서 현재 지원되는 연산, 연산자, 단계, 명령 및 옵션에 대한 자세한 목록을 찾을 수 있습니다.

데이터베이스 명령

Azure Cosmos DB for MongoDB는 다음과 같은 데이터베이스 명령을 지원합니다.

쿼리 및 쓰기 작업 명령

명령 지원됨
change streams
delete
eval 없음
find
findAndModify
getLastError
getMore
getPrevError 없음
insert
parallelCollectionScan 없음
resetError 없음
update

트랜잭션 명령

명령 지원됨
abortTransaction
commitTransaction

인증 명령

명령 지원됨
authenticate
getnonce
logout

관리 명령

명령 지원됨
cloneCollectionAsCapped 아니요
collMod 없음
connectionStatus 없음
convertToCapped 없음
copydb 없음
create
createIndexes
currentOp
drop
dropDatabase
dropIndexes
filemd5
killCursors
killOp 없음
listCollections
listDatabases
listIndexes
reIndex
renameCollection 아니요

진단 명령

명령 지원됨
buildInfo
collStats
connPoolStats 없음
connectionStatus 없음
dataSize 없음
dbHash 없음
dbStats
explain
features 없음
hostInfo
listDatabases
listCommands 없음
profiler 없음
serverStatus 없음
top 없음
whatsmyuri

집계 파이프라인

집계 명령

명령 지원됨
aggregate
count
distinct
mapReduce 아니요

집계 단계

명령 지원됨
addFields
bucket 없음
bucketAuto 없음
changeStream
collStats 없음
count
currentOp 없음
facet
geoNear
graphLookup
group
indexStats 없음
limit
listLocalSessions 없음
listSessions 아니요
lookup 부분
match
out
project
redact
replaceRoot
replaceWith 없음
sample
skip
sort
sortByCount
unwind

참고 항목

$lookup은 서버 버전 3.6에 도입된 상관 관계가 없는 하위 쿼리 기능을 아직 지원하지 않습니다. letpipeline 필드에서 $lookup 연산자를 사용하려고 하면 let is not supported가 포함된 오류 메시지가 표시됩니다.

부울 식

명령 지원됨
and
not
or

변환 식

명령 지원됨
convert
toBool
toDate
toDecimal
toDouble
toInt
toLong
toObjectId
toString

식 설정

명령 지원됨
setEquals
setIntersection
setUnion
setDifference
setIsSubset
anyElementTrue
allElementsTrue

비교 식

참고 항목

API for MongoDB는 쿼리에서 배열 리터럴이 있는 비교 식을 지원하지 않습니다.

명령 지원됨
cmp
eq
gt
gte
lt
lte
ne
in
nin

산술 식

명령 지원됨
abs
add
ceil
divide
exp
floor
ln
log
log10
mod
multiply
pow
sqrt
subtract
trunc

문자열 식

명령 지원됨
concat
indexOfBytes
indexOfCP
ltrim
rtrim
trim
split
strLenBytes
strLenCP
strcasecmp
substr
substrBytes
substrCP
toLower
toUpper

텍스트 검색 연산자

명령 지원됨
meta 아니요

배열 식

명령 지원됨
arrayElemAt
arrayToObject
concatArrays
filter
indexOfArray
isArray
objectToArray
range
reverseArray
reduce
size
slice
zip
in

변수 연산자

명령 지원됨
map
let

시스템 변수

명령 지원됨
$$CURRENT
$$DESCEND
$$KEEP
$$PRUNE
$$REMOVE
$$ROOT

리터럴 연산자

명령 지원됨
literal

날짜 식

명령 지원됨
dayOfYear
dayOfMonth
dayOfWeek
year
month
week
hour
minute
second
millisecond
dateToString
isoDayOfWeek
isoWeek
dateFromParts
dateToParts
dateFromString
isoWeekYear

조건부 식

명령 지원됨
cond
ifNull
switch

데이터 형식 연산자

명령 지원됨
type

누적기 식

명령 지원됨
sum
avg
first
last
max
min
push
addToSet
stdDevPop
stdDevSamp

Merge 연산자

명령 지원됨
mergeObjects

데이터 형식

Azure Cosmos DB for MongoDB는 MongoDB BSON 형식으로 인코딩된 문서를 지원합니다. 4.0 API 버전은 이 형식의 내부 사용을 개선하여 성능을 향상시키고 비용을 절감합니다. 4.0 이상을 실행하는 엔드포인트를 통해 작성되거나 업데이트된 문서에서 이 최적화를 활용합니다.

업그레이드 시나리오에서는 버전 4.0 이상으로 업그레이드하기 전에 작성된 문서는 4.0 이상 엔드포인트를 통한 쓰기 작업을 통해 업데이트될 때까지 향상된 성능을 제공하지 않습니다.

16MB 문서를 지원하는 기능은 문서의 크기 한도를 2MB에서 16MB로 높입니다. 이 한도는 이 기능을 사용하도록 설정한 후에 만든 컬렉션에만 적용됩니다. 데이터베이스 계정에 이 기능이 사용하도록 설정된 후에는 사용하지 않도록 설정할 수 없습니다.

Azure Portal의 기능 탭에서 또는 "EnableMongo16MBDocumentSupport" 기능을 추가하여 프로그래밍 방식으로 16MB를 사용하도록 설정할 수 있습니다.

서버 쪽 다시 시도를 사용하도록 설정하고 와일드카드 인덱스를 방지하여 더 큰 문서가 있는 요청이 성공하도록 하는 것이 좋습니다. 필요한 경우 DB/컬렉션 RU를 늘리는 것도 성능에 도움이 될 수 있습니다.

명령 지원됨
Double
String
Object
Array
Binary Data
ObjectId
Boolean
Date
Null
32-bit Integer (int)
Timestamp
64-bit Integer (long)
MinKey
MaxKey
Decimal128
Regular Expression
JavaScript
JavaScript (with scope)
Undefined

인덱스 및 인덱스 속성

인덱스

명령 지원됨
Single Field Index
Compound Index
Multikey Index
Text Index 없음
2dsphere
2d Index 없음
Hashed Index 아니요

인덱스 속성

명령 지원됨
TTL
Unique
Partial 없음
Case Insensitive 없음
Sparse 없음
Background

연산자

논리 연산자

명령 지원됨
or
and
not
nor

요소 연산자

명령 지원됨
exists
type

평가 쿼리 연산자

명령 지원됨
expr
jsonSchema 없음
mod
regex
text 아니요(지원되지 않습니다. 대신 $regex를 사용합니다.)
where 아니요

$regex 쿼리에서 왼쪽에 고정된 식은 인덱스 검색을 허용합니다. 그러나 ‘i’ 한정자(대/소문자 구분 없음) 및 ‘m’ 한정자(여러 줄)를 사용하면 모든 식에서 컬렉션 검사가 수행됩니다.

'$' 또는 '|'를 포함해야 하는 경우 두 개 이상의 정규식 쿼리를 만드는 것이 가장 좋습니다. 예를 들어, 다음 원래 쿼리가 find({x:{$regex: /^abc$/})인 경우 이를 다음과 같이 수정해야 합니다.

find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})

첫 번째 부분은 인덱스를 사용하여 ^abc로 시작하는 문서로 검색을 제한하며, 두 번째 부분은 정확한 항목의 일치를 확인합니다. 막대 연산자 ‘|’는 “or” 함수 역할을 하고, find({x:{$regex: /^abc |^def/}) 쿼리는 ‘x’ 필드에 “abc” 또는 “def”로 시작하는 값이 있는 문서를 일치하는 항목으로 검색합니다. 인덱스를 사용하려면 쿼리를 $or 연산자 find( {$or : [{x: $regex: /^abc/}, {$regex: /^def/}] })에 의해 조인된 두 개의 서로 다른 쿼리로 나누는 것이 좋습니다.

배열 연산자

명령 지원됨
all
elemMatch
size

설명 연산자

명령 지원됨
comment

프로젝션 연산자

명령 지원됨
elemMatch
meta 없음
slice

업데이트 연산자

필드 업데이트 연산자

명령 지원됨
inc
mul
rename
setOnInsert
set
unset
min
max
currentDate

배열 업데이트 연산자

명령 지원됨
$
$[]
$[\<identifier\>]
addToSet
pop
pullAll
pull
push
pushAll

한정자 업데이트

명령 지원됨
each
slice
sort
position

비트 업데이트 연산자

명령 지원됨
bit
bitsAllSet 없음
bitsAnySet 없음
bitsAllClear 없음
bitsAnyClear 아니요

지리 공간적 연산자

연산자 지원됨
$geoWithin
$geoIntersects
$near
$nearSphere
$geometry
$minDistance
$maxDistance
$center 없음
$centerSphere 없음
$box 없음
$polygon 아니요

정렬 작업

API for MongoDB 버전 4.0에서 findOneAndUpdate 작업을 사용하는 경우 단일 필드 및 여러 필드에 대한 정렬 작업이 지원됩니다. 여러 필드에 대한 정렬 작업은 이전 유선 프로토콜의 제한 사항이었습니다.

인덱싱

API for MongoDB는 여러 필드에 대한 정렬을 사용하도록 설정하고, 쿼리 성능을 향상시키고, 고유성을 적용할 수 있도록 다양한 인덱스를 지원합니다.

GridFS

Azure Cosmos DB는 GridFS 호환 Mongo 드라이버를 통해 GridFS를 지원합니다.

복제

Azure Cosmos DB는 가장 낮은 계층에서 자동의 네이티브 복제를 지원합니다. 이 논리는 또한 짧은 대기 시간, 글로벌 복제를 달성하기 위해 확장됩니다. Azure Cosmos DB는 수동 복제 명령을 지원하지 않습니다.

다시 시도 가능한 쓰기

다시 시도 가능한 쓰기를 사용하면 실패가 발생한 경우 MongoDB 드라이버가 특정 쓰기 작업을 자동으로 다시 시도할 수 있지만 특정 작업에 대해 MongoDB 프로토콜 요구 사항과 일치하는 더 엄격한 요구 사항이 발생합니다. 이 기능을 사용하도록 설정하면 분할된 컬렉션에서 삭제를 포함한 업데이트 작업을 위해 분할된 데이터베이스 키를 쿼리 필터 또는 업데이트 문에 포함해야 합니다.

예를 들어 "country" 키에 분할된, 분할된 컬렉션의 경우: city = "NYC" 필드가 있는 모든 문서를 삭제하려면 다시 시도 가능한 쓰기를 사용하는 경우 애플리케이션에서 모든 분할 키(country) 값에 대한 작업을 실행해야 합니다.

  • db.coll.deleteMany({"country": "USA", "city": "NYC"}) - 성공
  • db.coll.deleteMany({"city": "NYC"}) - ShardKeyNotFound(61) 오류로 인해 실패함

참고 항목

다시 시도 가능한 쓰기는 현재 순서가 지정되지 않은 대량 쓰기를 지원하지 않습니다. 다시 시도 가능한 쓰기가 사용하도록 설정된 상태에서 대량 쓰기를 수행하려면 순서가 지정된 대량 쓰기를 수행합니다.

이 기능을 사용하도록 설정하려면 데이터베이스 계정에 EnableMongoRetryableWrites 기능을 추가합니다. 이 기능은 Azure Portal의 기능 탭에서도 사용하도록 설정할 수 있습니다.

분할

Azure Cosmos DB는 서버 측 자동 분할을 지원합니다. 분할 만들기, 배치 및 분산을 자동으로 관리합니다. Azure Cosmos DB는 수동 분할 명령을 지원하지 않으므로 addShard, balancerStart, moveChunk 등의 명령을 호출할 필요가 없습니다. 컨테이너를 만들거나 데이터를 쿼리하는 동안만 분할 키를 지정하면 됩니다.

세션

Azure Cosmos DB는 아직 서버 쪽 세션 명령을 지원하지 않습니다.

TTL(Time to Live)

Azure Cosmos DB는 문서의 타임스탬프를 기반으로 TTL(Time to Live)을 지원합니다. Azure Portal에서 컬렉션에 TTL을 사용하도록 설정할 수 있습니다.

트랜잭션

다중 문서 트랜잭션은 분할되지 않은 컬렉션 내에서 지원됩니다. 다중 문서 트랜잭션은 컬렉션 전체 또는 분할된 컬렉션에서 지원되지 않습니다. 트랜잭션의 제한 시간은 5초로 고정되어 있습니다.

사용자 및 역할 관리

Azure Cosmos DB는 아직 사용자 및 역할을 지원하지 않습니다. 그러나 Azure Cosmos DB는 Azure Portal(연결 문자열 페이지)을 통해 가져올 수 있는 Azure RBAC(Azure 역할 기반 액세스 제어)와 읽기-쓰기 및 읽기 전용 암호/키를 지원합니다.

쓰기 문제

일부 애플리케이션은 쓰기 작업 중에 필요한 응답 수를 지정하는 쓰기 문제를 사용합니다. Azure Cosmos DB가 백그라운드에서 복제를 처리하는 방식 때문에 모든 쓰기는 자동으로 쿼럼(기본값)입니다. 클라이언트 코드를 통해 지정된 모든 쓰기 문제는 무시됩니다. 일관성 수준을 사용하여 가용성 및 성능 최대화에서 자세히 알아보세요.

다음 단계