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 compatible 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 16 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.
  • En los eventos de Eventarc, los documentos de más de 10 MiB no se incluyen en la carga útil del evento.

Campo _id

  • El campo _id de nivel superior debe ser un ObjectId, una cadena, un número entero de 32 o 64 bits, un número de punto flotante de doble precisión, un valor binario o un objeto. No se admiten otros tipos de BSON.

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 y 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.
  • La etapa $facet no admite $rand ni $sample en las etapas de entrada porque es una expresión volátil.

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

  • Se admiten el aislamiento de instantáneas y las transacciones serializables.

  • De forma predeterminada, las transacciones usan controles de simultaneidad optimista con aislamiento de instantáneas.

Preocupación por la lectura

  • Firestore con compatibilidad con MongoDB admite las opciones de lectura snapshot, majority y linearizable. El valor predeterminado es snapshot, que hace referencia al aislamiento de instantáneas.

    Usa linearizable cuando la aplicación requiera coherencia estricta y deba evitar anomalías de sesgo de escritura. Para otras cargas de trabajo, snapshot puede mejorar el rendimiento y reducir la contención de transacciones.

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.

Índices

  • No se admiten los índices de comodín.
  • 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.

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 comment, pero se ignora.
  • La mayoría de los comandos aceptan maxTimeMS, pero es posible que se ignore.

Consultas

y escribe

Comando Campos no compatibles

find

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

aggregate

  • collation
  • let

insert

(ninguno)

update

En una sentencia de actualización, haz lo siguiente:

  • collation

delete

Dentro de una sentencia de eliminación:

  • collation

findAndModify

  • collation
  • let

count

  • collation

distinct

  • collation

getMore

  • comment

killCursors

(ninguno)

explain

(ninguno)

Transacciones

y sesiones

Comando Campos no compatibles

commitTransaction

(ninguno)

abortTransaction

(ninguno)

endSessions

(ninguno)

Administración

Comando Campos no compatibles Notas

listDatabases

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

listCollections

(ninguno)

authorizedCollections debe ser falso si se proporciona.

listIndexes

(ninguno)

createIndexes

(ninguno)

dropIndexes

(ninguno)

createCollection

  • timeseries
  • expireAfterSeconds
  • clusteredIndex
  • changeStreamPreAndPostImages
  • size
  • max
  • storageEngine
  • validator
  • validationLevel
  • validationAction
  • indexOptionDefaults
  • viewOn
  • pipeline
  • collation
  • encryptedFields
Este comando no hace nada.

capped debe ser falso si se proporciona.

drop

(ninguno)

Limitaciones de la operación de descarte de la colección

Se aplican las siguientes limitaciones cuando descartas una colección:

  • Recreación del índice: No puedes crear la misma configuración de índice inmediatamente después de una caída. Debes esperar a que finalice la eliminación en segundo plano.
  • Límite de tamaño: Descartar colecciones grandes puede provocar tiempos de espera de conexión. Aumenta el plazo de conexión si ves tiempos de espera. Puedes usar la borrado masivo como alternativa.
  • Eventos: No se generan eventos de recopilación de soltar para Eventarc cuando se usa el comando drop.

¿Qué sigue?