Azure Cosmos DB for MongoDB(3.2 버전): 지원 기능 및 구문

적용 대상: 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 버전 3.2는 현재 EOL(수명 종료) 계획이 없습니다. 향후 EOL에 대한 최소 알림은 3년입니다.

프로토콜 지원

Azure Cosmos DB for MongoDB에 대한 모든 새 계정은 MongoDB 서버 버전 3.6과 호환됩니다. 이 문서에서는 MongoDB 버전 3.2에 대해 설명합니다. 지원되는 연산자 및 제한 사항이나 예외는 다음과 같습니다. 이러한 프로토콜을 인식하는 모든 클라이언트 드라이버는 Azure Cosmos DB for MongoDB에 연결할 수 있습니다.

또한 Azure Cosmos DB for MongoDB는 적격 계정에 대한 원활한 업그레이드 환경을 제공합니다. 자세한 내용은 MongoDB 버전 업그레이드 가이드를 참조하세요.

쿼리 언어 지원

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

데이터베이스 명령

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

참고 항목

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

쿼리 및 쓰기 작업 명령

  • delete
  • find
  • findAndModify
  • getLastError
  • getMore
  • insert
  • update

인증 명령

  • logout
  • authenticate
  • getnonce

관리 명령

  • dropDatabase
  • listCollections
  • drop
  • create
  • filemd5
  • createIndexes
  • listIndexes
  • dropIndexes
  • connectionStatus
  • reIndex

진단 명령

  • buildInfo
  • collStats
  • dbStats
  • hostInfo
  • listDatabases
  • whatsmyuri

집계 파이프라인

집계 명령

  • aggregate
  • count
  • distinct

집계 단계

  • $project
  • $match
  • $limit
  • $skip
  • $unwind
  • $group
  • $sample
  • $sort
  • $lookup
  • $out
  • $count
  • $addFields

집계 식

부울 식

  • $and
  • $or
  • $not

식 설정

  • $setEquals
  • $setIntersection
  • $setUnion
  • $setDifference
  • $setIsSubset
  • $anyElementTrue
  • $allElementsTrue

비교 식

  • $cmp
  • $eq
  • $gt
  • $gte
  • $lt
  • $lte
  • $ne

산술 식

  • $abs
  • $add
  • $ceil
  • $divide
  • $exp
  • $floor
  • $ln
  • $log
  • $log10
  • $mod
  • $multiply
  • $pow
  • $sqrt
  • $subtract
  • $trunc

문자열 식

  • $concat
  • $indexOfBytes
  • $indexOfCP
  • $split
  • $strLenBytes
  • $strLenCP
  • $strcasecmp
  • $substr
  • $substrBytes
  • $substrCP
  • $toLower
  • $toUpper

배열 식

  • $arrayElemAt
  • $concatArrays
  • $filter
  • $indexOfArray
  • $isArray
  • $range
  • $reverseArray
  • $size
  • $slice
  • $in

날짜 식

  • $dayOfYear
  • $dayOfMonth
  • $dayOfWeek
  • $year
  • $month
  • $week
  • $hour
  • $minute
  • $second
  • $millisecond
  • $isoDayOfWeek
  • $isoWeek

조건부 식

  • $cond
  • $ifNull

집계 누적기

  • $sum
  • $avg
  • $first
  • $last
  • $max
  • $min
  • $push
  • $addToSet

연산자

다음 연산자는 해당 사용 예제에서 지원됩니다. 아래의 쿼리에서 사용되는 이 샘플 문서를 고려하세요.

{
  "Volcano Name": "Rainier",
  "Country": "United States",
  "Region": "US-Washington",
  "Location": {
    "type": "Point",
    "coordinates": [
      -121.758,
      46.87
    ]
  },
  "Elevation": 4392,
  "Type": "Stratovolcano",
  "Status": "Dendrochronology",
  "Last Known Eruption": "Last known eruption from 1800-1899, inclusive"
}
연산자 예시
eq { "Volcano Name": { $eq: "Rainier" } }
gt { "Elevation": { $gt: 4000 } }
gte { "Elevation": { $gte: 4392 } }
lt { "Elevation": { $lt: 5000 } }
lte { "Elevation": { $lte: 5000 } }
ne { "Elevation": { $ne: 1 } }
in { "Volcano Name": { $in: ["St. Helens", "Rainier", "Glacier Peak"] } }
nin { "Volcano Name": { $nin: ["Lassen Peak", "Hood", "Baker"] } }
or { $or: [ { Elevation: { $lt: 4000 } }, { "Volcano Name": "Rainier" } ] }
and { $and: [ { Elevation: { $gt: 4000 } }, { "Volcano Name": "Rainier" } ] }
not { "Elevation": { $not: { $gt: 5000 } } }
nor { $nor: [ { "Elevation": { $lt: 4000 } }, { "Volcano Name": "Baker" } ] }
exists { "Status": { $exists: true } }
type { "Status": { $type: "string" } }
mod { "Elevation": { $mod: [ 4, 0 ] } }
regex { "Volcano Name": { $regex: "^Rain"} }

주의

$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/}] })에 의해 조인된 두 개의 서로 다른 쿼리로 나누는 것이 좋습니다.

업데이트 연산자

필드 업데이트 연산자

  • $inc
  • $mul
  • $rename
  • $setOnInsert
  • $set
  • $unset
  • $min
  • $max
  • $currentDate

배열 업데이트 연산자

  • $addToSet
  • $pop
  • $pullAll
  • $pull(참고: $pull에는 조건이 지원되지 않음)
  • $pushAll
  • $push
  • $each
  • $slice
  • $sort
  • $position

비트 업데이트 연산자

  • $bit

지리 공간적 연산자

연산자 예시 지원됨
$geoWithin { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$geoIntersects { "Location.coordinates": { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$near { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$nearSphere { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$geometry { "Location.coordinates": { $geoWithin: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }
$minDistance { "Location.coordinates": { $nearSphere : { $geometry: {type: "Point", coordinates: [ -121, 46 ]}, $minDistance: 1000, $maxDistance: 1000000 } } }
$maxDistance { "Location.coordinates": { $nearSphere : [ -121, 46 ], $maxDistance: 0.50 } }
$center { "Location.coordinates": { $geoWithin: { $center: [ [-121, 46], 1 ] } } }
$centerSphere { "Location.coordinates": { $geoWithin: { $centerSphere: [ [ -121, 46 ], 5 ] } } }
$box { "Location.coordinates": { $geoWithin: { $box: [ [ 0, 0 ], [ -122, 47 ] ] } } }
$polygon { "Location.coordinates": { $near: { $geometry: { type: "Polygon", coordinates: [ [ [ -121.9, 46.7 ], [ -121.5, 46.7 ], [ -121.5, 46.9 ], [ -121.9, 46.9 ], [ -121.9, 46.7 ] ] ] } } } }

정렬 작업

findOneAndUpdate 작업을 사용하는 경우 단일 필드에 대한 정렬 작업이 지원되지만 여러 필드에 대한 정렬 작업은 지원되지 않습니다.

기타 연산자

연산자 예시 주의
$all { "Location.coordinates": { $all: [-121.758, 46.87] } }
$elemMatch { "Location.coordinates": { $elemMatch: { $lt: 0 } } }
$size { "Location.coordinates": { $size: 2 } }
$comment { "Location.coordinates": { $elemMatch: { $lt: 0 } }, $comment: "Negative values"}
$text 지원되지 않습니다. 대신 $regex를 사용합니다.

지원되지 않는 연산자

$where$eval 연산자는 Azure Cosmos DB에서 지원되지 않습니다.

메서드

다음 메서드가 지원됩니다.

커서 메서드

메서드 예시 주의
cursor.sort() cursor.sort({ "Elevation": -1 }) 정렬 키가 없는 문서가 반환되지 않음

고유 인덱스

Azure Cosmos DB는 기본적으로 데이터베이스에 기록되는 문서에서 모든 필드를 인덱싱합니다. 고유 인덱스를 사용하면 컬렉션의 모든 문서에서 특정 필드에 중복된 값이 나타나지 않으며, 이는 기본 _id 키에서 고유성이 유지되는 방식과 유사합니다. ‘고유’ 제약 조건을 포함하여 createIndex 명령을 사용하여 Azure Cosmos DB에서 사용자 지정 인덱스를 만들 수 있습니다.

고유 인덱스는 Azure Cosmos DB for MongoDB를 사용하는 모든 Azure Cosmos DB 계정에 사용할 수 있습니다.

TTL(Time to Live)

Azure Cosmos DB는 버전 3.2의 컬렉션 수준(_ts)에서 TTL(Time to Live)만 지원합니다. 다른 형태의 TTL을 활용하려면 버전 3.6 이상으로 업그레이드합니다.

사용자 및 역할 관리

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

복제

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

쓰기 문제

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

분할

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

다음 단계

  • Azure Cosmos DB for MongoDB에서 Studio 3T를 사용하는 방법을 알아봅니다.
  • Azure Cosmos DB for MongoDB에서 Robo 3T를 사용하는 방법을 알아봅니다.
  • Azure Cosmos DB for MongoDB를 사용하여 MongoDB 샘플을 살펴봅니다.