Azure Cosmos DB for MongoDB(4.2 서버 버전): 지원되는 기능 및 구문
적용 대상: MongoDB
Azure Cosmos DB는 전 세계에 배포되는 Microsoft의 다중 모델 데이터베이스 서비스입니다. Azure Cosmos DB를 여러 데이터베이스 API를 제공합니다. 오픈 소스 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 |
예 |
트랜잭션 명령
참고 항목
다중 문서 트랜잭션은 분할되지 않은 단일 컬렉션 내에서만 지원됩니다. 교차 수집 및 교차 분할 다중 문서 트랜잭션은 아직 MongoDB용 API에서 지원되지 않습니다.
명령 | 지원됨 |
---|---|
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 |
예 |
집계 파이프라인
Azure Cosmos DB for MongoDB에서 지원하는 집계 명령은 다음과 같습니다.
집계 명령
명령 | 지원됨 |
---|---|
aggregate |
예 |
count |
예 |
distinct |
예 |
mapReduce |
아니요 |
집계 단계
명령 | 지원됨 |
---|---|
addFields |
예 |
bucket |
아니요 |
bucketAuto |
아니요 |
changeStream |
예 |
collStats |
아니요 |
count |
예 |
currentOp |
아니요 |
facet |
예 |
geoNear |
예 |
graphLookup |
아니요 |
group |
예 |
indexStats |
아니요 |
limit |
예 |
listLocalSessions |
아니요 |
listSessions |
아니요 |
lookup |
부분 |
match |
예 |
merge |
예 |
out |
예 |
planCacheStats |
예 |
project |
예 |
redact |
예 |
regexFind |
예 |
regexFindAll |
예 |
regexMatch |
예 |
replaceRoot |
예 |
replaceWith |
예 |
sample |
예 |
set |
예 |
skip |
예 |
sort |
예 |
sortByCount |
예 |
unset |
예 |
unwind |
예 |
참고 항목
$lookup
집계는 아직 서버 버전 3.6에 도입된 상호 관련되지 않은 하위 쿼리 기능을 지원하지 않습니다. $lookup
연산자를 let
및 pipeline
필드에 사용하려고 하면 let
이 지원되지 않습니다라고 나타내는 오류 메시지가 표시됩니다.
부울 식
명령 | 지원됨 |
---|---|
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 |
예 |
round |
예 |
sqrt |
예 |
subtract |
예 |
trunc |
예 |
삼각 함수 식
명령 | 지원됨 |
---|---|
acos |
예 |
acosh |
예 |
asin |
예 |
asinh |
예 |
atan |
예 |
atan2 |
예 |
atanh |
예 |
cos |
예 |
cosh |
예 |
degreesToRadians |
예 |
radiansToDegrees |
예 |
sin |
예 |
sinh |
예 |
tan |
예 |
tanh |
예 |
문자열 식
명령 | 지원됨 |
---|---|
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 |
예 |
시스템 변수
명령 | 지원됨 |
---|---|
$$CLUSTERTIME |
예 |
$$CURRENT |
예 |
$$DESCEND |
예 |
$$KEEP |
예 |
$$NOW |
예 |
$$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 이상(4.0+)에서는 이 형식의 내부 사용을 개선하여 성능이 향상되고 비용이 절감됩니다. 4.0 이상을 실행하는 엔드포인트를 통해 작성되거나 업데이트된 문서에서 이 최적화를 활용합니다.
업그레이드 시나리오에서 버전 4.0 이상으로 업그레이드하기 전에 작성된 문서는 4.0 이상 엔드포인트를 통한 쓰기 작업을 통해 업데이트될 때까지 향상된 성능의 이점을 누릴 수 없습니다.
16MB 문서를 지원하는 기능은 문서의 크기 한도를 2MB에서 16MB로 높입니다. 이 제한은 이 기능을 사용하도록 설정한 후에 만든 컬렉션에만 적용됩니다. 이 기능은 데이터베이스 계정에 사용하도록 설정되면 사용하지 않도록 설정할 수 없습니다.
16MB 문서 지원을 사용하도록 설정하려면 Azure Portal의 리소스에 대한 기능 탭에서 설정을 변경하거나 프로그래밍 방식으로 EnableMongo16MBDocumentSupport
기능을 추가합니다.
더 큰 문서의 요청이 성공하도록 하려면 서버 쪽 다시 시도를 사용하도록 설정하고 와일드카드 인덱스를 사용하지 않도록 하는 것이 좋습니다. 데이터베이스 또는 컬렉션 요청 단위를 늘리는 것도 성능에 도움이 될 수 있습니다.
명령 | 지원됨 |
---|---|
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 |
예 |
인덱스 및 인덱스 속성
Azure Cosmos DB for MongoDB에서 지원하는 인덱스 및 인덱스 속성은 다음과 같습니다.
인덱스
명령 | 지원됨 |
---|---|
Single Field Index |
예 |
Compound Index |
예 |
Multikey Index |
예 |
Text Index |
아니요 |
2dsphere |
예 |
2d Index |
아니요 |
Hashed Index |
아니요 |
인덱스 속성
명령 | 지원됨 |
---|---|
TTL |
예 |
Unique |
예 |
Partial |
고유 인덱스에만 지원됨 |
Case Insensitive |
아니요 |
Sparse |
아니요 |
Background |
예 |
연산자
Azure Cosmos DB for MongoDB에서 지원하는 연산자는 다음과 같습니다.
논리 연산자
명령 | 지원됨 |
---|---|
or |
예 |
and |
예 |
not |
예 |
nor |
예 |
요소 연산자
명령 | 지원됨 |
---|---|
exists |
예 |
type |
예 |
평가 쿼리 연산자
명령 | 지원됨 |
---|---|
expr |
예 |
jsonSchema |
아니요 |
mod |
예 |
regex |
예 |
text |
아니요(지원되지 않음, 대신 $regex 사용) |
where |
아니요 |
$regex
쿼리에서 고정된 왼쪽 식은 인덱스 검색을 허용합니다. 그러나 i
한정자(대/소문자 구분 안 함) 및 m
한정자(여러 줄)를 사용하면 모든 식에서 컬렉션이 검사됩니다.
$
또는 |
을 포함해야 하는 경우 둘 이상의 $regex
쿼리를 만드는 것이 가장 좋습니다.
예를 들어 다음의 원래 쿼리를
find({x:{$regex: /^abc$/})
이 쿼리로 변경합니다.
find({x:{$regex: /^abc/, x:{$regex:/^abc$/}})
수정된 쿼리의 첫 번째 부분에서는 검색을 ^abc
로 시작하는 문서로 제한하기 위해 인덱스를 사용합니다. 쿼리의 두 번째 부분은 정확한 항목과 일치합니다. 세로줄 연산자(|
)는 "or" 함수 역할을 합니다. find({x:{$regex: /^abc |^def/})
쿼리는 abc
또는 def
로 시작하는 값이 x
필드에 있는 문서와 일치합니다. 인덱스를 사용하려면 쿼리를 $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 |
아니요 |
정렬 작업
findOneAndUpdate
작업을 사용하면 단일 필드에 대한 정렬 작업이 지원됩니다. 여러 필드에 대한 정렬 작업은 지원되지 않습니다.
인덱싱
API for MongoDB는 여러 필드에 대한 정렬을 사용하도록 설정하고, 쿼리 성능을 향상시키고, 고유성을 적용할 수 있도록 다양한 인덱스를 지원합니다.
클라이언트 쪽 필드 수준 암호화
클라이언트 수준 필드 암호화는 드라이버 기능이며 API for MongoDB와 호환됩니다. 드라이버가 각 필드를 작성할 때 명시적으로 암호화하는 명시적 암호화가 지원됩니다. 자동 암호화는 지원되지 않습니다. 명시적 암호 해독 및 자동 암호 해독이 지원됩니다.
mongocryptd
는 지원되는 작업을 수행하는 데 필요하지 않으므로 실행하면 안 됩니다.
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)을 지원합니다. TTL은 Azure Portal에서 컬렉션에 대해 사용하도록 설정할 수 있습니다.
사용자 지정 TTL
이 기능은 사용자 지정 TTL을 컬렉션의 한 필드에 설정하는 기능을 제공합니다.
필드에서 TTL이 사용하도록 설정된 컬렉션의 경우:
허용되는 형식은 만료를 결정하기 위해 Unix 밀리초 타임스탬프로 해석되는 BSON 데이터 형식과 숫자 형식(정수, long 또는 double)입니다.
TTL 필드가 배열인 경우 허용되는 형식의 배열 중 가장 작은 요소가 문서 만료로 간주됩니다.
문서에서 TTL 필드가 없으면 문서가 만료되지 않습니다.
TTL 필드가 허용되는 형식이 아니면 문서가 만료되지 않습니다.
사용자 지정 TTL의 제한 사항
컬렉션의 한 필드에만 TTL을 설정할 수 있습니다.
사용자 지정 TTL 필드가 설정된 경우
\_ts
필드는 문서 만료에 사용할 수 없습니다.\_ts
필드는 추가로 사용할 수 없습니다.
구성
계정에 대한 EnableTtlOnCustomPath
기능을 업데이트하여 사용자 지정 TTL을 사용하도록 설정할 수 있습니다. 기능을 구성하는 방법을 알아보세요.
TTL 설정
TTL을 설정하려면 다음 명령을 실행합니다. db.coll.createIndex({"YOUR_CUSTOM_TTL_FIELD":1}, {expireAfterSeconds: 10})
트랜잭션
다중 문서 트랜잭션은 분할되지 않은 컬렉션 내에서 지원됩니다. 다중 문서 트랜잭션은 컬렉션 전체 또는 분할된 컬렉션에서 지원되지 않습니다. 트랜잭션의 제한 시간은 5초로 고정되어 있습니다.
사용자 및 역할 관리
Azure Cosmos DB는 아직 사용자 및 역할을 지원하지 않습니다. 그러나 Azure Cosmos DB는 Azure RBAC(Azure 역할 기반 액세스 제어)와 Azure Portal의 연결 문자열 페이지를 통해 가져올 수 있는 읽기-쓰기 및 읽기 전용 암호와 키를 지원합니다.
쓰기 문제
일부 애플리케이션에서는 쓰기 작업 중에 필요한 응답 수를 지정하는 쓰기 문제를 사용합니다. Azure Cosmos DB의 백그라운드에서 복제를 처리하는 방식으로 인해 모든 쓰기는 자동으로 쿼럼(기본값)입니다. 클라이언트 코드에서 지정된 모든 쓰기 문제는 무시됩니다. 일관성 수준을 사용하여 가용성과 성능을 최대화하는 방법을 알아보세요.
다음 단계
- Azure Cosmos DB for MongoDB에서 Studio 3T를 사용하는 방법을 알아봅니다.
- Azure Cosmos DB for MongoDB에서 Robo 3T를 사용하는 방법을 알아봅니다.
- Azure Cosmos DB for MongoDB를 사용하여 MongoDB 샘플을 살펴봅니다.
- Azure Cosmos DB로 마이그레이션하기 위한 용량 계획을 수행하려고 하시나요? 용량 계획을 위해 기존 데이터베이스 클러스터에 대한 정보를 사용할 수 있습니다.
- 기존 데이터베이스 클러스터의 vCore 및 서버 수만을 알고 있는 경우, vCore 또는 vCPU를 사용하여 요청 단위 추정을 참조하세요.
- 현재 데이터베이스 워크로드에 대한 일반적인 요청 비율을 알고 있는 경우 Azure Cosmos DB Capacity Planner를 사용하여 요청 단위 예측을 참조하세요.