동작 차이

이 페이지에서는 MongoDB 호환 Firestore와 MongoDB의 동작 차이를 설명합니다.

MongoDB 버전에 따라 지원되는 기능의 세부정보는 다음을 참고하세요.

연결 및 데이터베이스

  • 각 연결은 MongoDB 호환성을 갖춘 단일 Firestore 데이터베이스로 제한됩니다.
  • 데이터베이스를 연결하기 전에 만들어야 합니다.

이름 지정

데이터 모델의 일부 이름 지정에는 다음과 같은 차이점이 적용됩니다.

컬렉션

  • __.*__와 일치하는 컬렉션 이름은 지원되지 않습니다.

필드

  • __.*__와 일치하는 필드 이름은 지원되지 않습니다.
  • 빈 필드 이름은 지원되지 않습니다.

문서

  • 최대 문서 크기는 4MiB입니다.
  • 필드의 최대 중첩 깊이는 20입니다. 각 배열 및 객체 유형 필드는 전체 심도에 1단계를 추가합니다.

_id

  • 문서 _id (최상위 필드)는 ObjectId, 문자열 또는 64비트 정수여야 합니다. 다른 BSON 유형은 지원되지 않습니다.
  • 빈 문자열 ("") 및 64비트 0 (0L)은 지원되지 않습니다.

  • JavaScript, Symbol, DBPointer, Undefined BSON 유형은 지원되지 않습니다.

날짜

  • 날짜 값은 [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z] 범위에 있어야 합니다.

Decimal128

  • NaN, 양의 무한대, 음의 무한대 값은 쓰기 시 정규화됩니다.
  • Decimal128에 대한 산술 연산은 지원되지 않습니다.

Double

  • NaN 값은 쓰기 시 정규화됩니다.

정규 표현식

  • 정규 표현식 옵션은 유효해야 하며 ('i', 'm', 's', 'u' 또는 'x') 반복 없이 알파벳순으로 제공되어야 합니다.

쿼리

  • 자연 정렬 순서 (명시적 정렬이 없는 쿼리)가 삽입 순서 또는 _id 오름차순 정렬 순서와 일치하지 않습니다.

집계

  • 집계는 250단계로 제한됩니다.
  • $merge$out 단계는 지원되지 않습니다. 지원되는 단계 및 연산자의 전체 목록은 명령어 섹션을 참고하세요.

쓰기

  • 이름이 달러 기호 ('$')로 시작하는 문서는 update 또는 findAndModify의 upsert 기능을 사용하여 만들 수 없습니다.
  • 연결 문자열에 retryWrites=false가 포함되어 있는지 확인하거나 드라이버에 적절한 메서드를 사용하여 드라이버가 이 기능을 사용하지 않도록 합니다. 재시도 가능한 쓰기는 지원되지 않습니다.

거래

  • 스냅샷 거래는 지원되지 않습니다.
  • 트랜잭션은 잠금과 함께 비관적 동시 실행 제어를 사용합니다. 잠금 경합을 방지하려면 트랜잭션에서 읽는 데이터의 양을 제한합니다.

색인

  • 와일드 카드 색인은 지원되지 않습니다.
  • 고유 색인은 지원되지 않습니다.
  • MongoDB 호환 Firestore는 _id에 색인을 자동으로 만들지 않지만 _id 값이 컬렉션 내에서 고유한지 확인합니다.
  • 다중 키가 사용 설정되지 않은 색인은 쓰기 작업에 따라 다중 키 색인으로 자동 변경되지 않습니다. 색인을 만들 때 다중 키를 사용 설정해야 하며 이 옵션은 변경할 수 없습니다.

우려사항 읽기

  • majority 읽기 우려 수준만 지원됩니다.

우려사항 작성

  • w: 'majority'w: 1 쓰기 문제만 지원됩니다.

환경설정 읽기

  • primary, primaryPreferred, primary_preferred, secondary_preferred, nearest 읽기 문제만 지원됩니다.

오류

  • MongoDB 호환 Firestore와 MongoDB의 오류 코드 및 메시지는 다를 수 있습니다.

명령어

다음 동작 차이는 특정 명령어에 적용됩니다.

  • 다음 표에 나열되지 않은 명령어는 지원되지 않습니다.
  • maxTimeMS는 대부분의 명령어에서 허용되지만 무시될 수도 있습니다.

쿼리 및 쓰기

명령어 지원되지 않는 필드

find

  • comment
  • readConcern
  • max
  • min
  • returnKey
  • showRecordId
  • tailable
  • oplogReplay
  • noCursorTimeout
  • awaitData
  • allowPartialResults
  • collation
  • allowDiskUsage
  • let

aggregate

  • bypassDocumentValidation
  • readConcern
  • collation
  • hint
  • comment
  • let

insert

  • bypassDocumentValidation
  • comment

update

  • collation
  • arrayFilters
  • hint

delete

  • comment
  • write

삭제 문에 포함된 경우:

  • collation
  • hint

findAndModify

  • fields
  • bypassDocumentValidation
  • collation
  • arrayFilters
  • hint
  • comment
  • let

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(없음)

거래 및 세션

명령어 지원되지 않는 필드

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(없음)

관리

명령어 지원되지 않는 필드 참고

listDatabases

  • authorizedDatabases
  • comment
filter가 제공된 경우 비어 있어야 합니다.

listCollections

  • comment
authorizedCollections가 제공된 경우 false여야 합니다.

listIndexes

  • comment

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • writeConcern
  • encryptedFields
  • comment
이 명령어는 무작위 작업입니다.

capped가 제공된 경우 false여야 합니다.

다음 단계