Diferencias de comportamiento

En esta página, se describen las diferencias de comportamiento entre Firestore con compatibilidad con MongoDB y MongoDB.

Para obtener un desglose de las funciones compatibles según la versión de MongoDB, consulta lo siguiente:

Conexiones y bases de datos

  • Cada conexión se limita a una sola base de datos de Firestore con compatibilidad con MongoDB.
  • Se debe crear una base de datos antes de conectarse a ella.

Nombre

Las siguientes diferencias se aplican a la asignación de nombres a las partes de tu modelo de datos.

Colecciones

  • No se admiten nombres de colecciones que coincidan con __.*__.

Campos

  • No se admiten nombres de campos que coincidan con __.*__.
  • No se admiten nombres de campos vacíos.

Documentos

  • El tamaño máximo del documento es de 4 MiB.
  • La profundidad de anidación máxima de los campos es de 20. Cada campo de tipo Array y Object agrega un nivel a la profundidad general.

_id

  • _id del documento (campo de nivel superior) debe ser un ObjectId, una cadena o un número entero de 64 bits. No se admiten otros tipos de BSON.
  • No se admiten la cadena vacía ("") ni el 0 de 64 bits (0L).

Valores

  • No se admiten los tipos BSON de JavaScript, Symbol, DBPointer y Undefined.

Fecha

  • Los valores de fecha deben estar en [0001-01-01T00:00:00Z, 9999-12-31T23:59:59Z].

Decimal128

  • Los valores NaN, infinito positivo e infinito negativo se canonicalizan durante la escritura.
  • No se admiten operaciones aritméticas en Decimal128.

Doble

  • Los valores de NaN se canonizan en la escritura.

Expresión regular

  • Las opciones de expresión regular deben ser válidas ("i", "m", "s", "u" o "x") y proporcionarse en orden alfabético sin repeticiones.

Consultas

  • El orden de clasificación natural (consultas sin una clasificación explícita) no coincide con el orden de inserción ni con el orden ascendente por _id.

Agregaciones

  • Las agregaciones tienen un límite de 250 etapas.
  • Las etapas $merge y $out no son compatibles. Consulta la sección de comandos para obtener una lista completa de las etapas y los operadores compatibles.

Escrituras

  • No se pueden crear documentos con nombres que comiencen con un signo de dólar ("$") con la función de inserción y actualización de update o findAndModify.
  • Asegúrate de que la cadena de conexión incluya retryWrites=false (o usa el método adecuado para tu controlador) para asegurarte de que el controlador no intente usar esta función. No se admiten las operaciones de escritura que admiten reintentos.

Transacciones

  • No se admiten las transacciones de instantáneas.
  • Las transacciones usan controles de simultaneidad pesimistas con bloqueos. Para evitar la contención de bloqueos, limita la cantidad de datos que se leen en una transacción.

Índices

  • Los índices de comodines no son compatibles.
  • No se admiten los índices únicos
  • Firestore con compatibilidad con MongoDB no crea automáticamente un índice en _id, pero garantiza que los valores de _id sean únicos dentro de una colección.
  • Los índices sin varias claves habilitadas no se cambian automáticamente a índices de varias claves según las operaciones de escritura. Debes habilitar la clave múltiple cuando creas el índice, y la opción no se puede cambiar.

Leer preocupación

  • Solo se admite el nivel de preocupación de lectura majority.

Cómo escribir una inquietud

  • Solo se admiten las inquietudes de escritura w: 'majority' y w: 1.

Cómo leer preferencias

  • Solo se admiten las inquietudes de lectura primary, primaryPreferred, primary_preferred, secondary_preferred y nearest.

Errores

  • Los códigos y mensajes de error pueden diferir entre Firestore con compatibilidad con MongoDB y MongoDB.

Comandos

Las siguientes diferencias de comportamiento se aplican a comandos específicos.

  • No se admiten los comandos que no se indican en las siguientes tablas.
  • La mayoría de los comandos aceptan maxTimeMS, pero se puede ignorar.

Consultas y operaciones de escritura

Comando Campos no admitidos

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

Dentro de una sentencia DELETE:

  • collation
  • hint

findAndModify

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

count

  • hint
  • readConcern
  • collation
  • comment

distinct

  • readConcern
  • collation
  • comment
  • hint

getMore

  • comment

killCursors

(ninguno)

Transacciones y sesiones

Comando Campos no admitidos

commitTransaction

  • comment

abortTransaction

  • comment

endSessions

(ninguno)

Administración

Comando Campos no admitidos Notas

listDatabases

  • authorizedDatabases
  • comment
filter debe estar vacío si se proporciona.

listCollections

  • comment
authorizedCollections debe ser falso si se proporciona.

listIndexes

  • comment

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • writeConcern
  • encryptedFields
  • comment
Este comando no realiza ninguna acción.

capped debe ser falso si se proporciona.

¿Qué sigue?