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 las partes de tu modelo de datos.

Colecciones

  • No se admiten nombres de colección 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 máxima de anidación de los campos es de 20. Cada campo con tipo Array y Object agrega un nivel a la profundidad general.

_id

  • El documento _id (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 las cadenas vacías ("") ni el 0 de 64 bits (0L).

Valores

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

Fecha

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

Decimal128

  • Los valores NaN, infinito positivo e infinito negativo se canonizan en la escritura.
  • No se admiten las 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 por _id ascendente.

Agregaciones

  • Las agregaciones se limitan a 250 etapas.
  • No se admiten las etapas $merge y $out. Consulta la sección de comandos para obtener una lista completa de las etapas y los operadores admitidos.

Escrituras

  • Los documentos con nombres que comienzan con un signo de dólar (“$”) no se pueden crear con la función de upsert de update o findAndModify.
  • Asegúrate de que tu 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 escrituras reintentables.

Transacciones

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

Índices

  • No se admiten los índices de comodín.
  • 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 la función de varias claves habilitada no se cambian automáticamente a índices de varias claves según las operaciones de escritura. Debes habilitar la opción de varias claves cuando crees el índice, y no se puede cambiar.

Preocupación por la lectura

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

Confirmación de escritura

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

Preferencia de lectura

  • Solo se admiten los problemas 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 enumeran en las siguientes tablas.
  • La mayoría de los comandos aceptan maxTimeMS, pero es posible que lo ignoren.

Consultas y escrituras

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 de eliminación:

  • 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 hace nada.

capped debe ser falso si se proporciona.

¿Qué sigue?