Documentos y BSON

Los tipos de BSON, Extended JSON, el orden de comparación y la collation, como en MongoDB.

TeselaDB guarda documentos BSON con todos sus tipos: double, string, documento, array, binario, ObjectId, booleano, fecha, null, expresión regular, JavaScript, int, long, Decimal128, Timestamp, MinKey y MaxKey. Lo que escribe tu driver es lo que vuelve a leer, byte a byte.

Cómo funciona

El formato de los documentos y el orden en que se comparan los valores son los de MongoDB. Lo son también cuando un documento viaja en JSON por la API REST o por mongoexport y cuando una consulta compara cadenas con collation en el idioma de tus datos.

Extended JSON

Las herramientas que hablan JSON (mongoexport, mongoimport, la API REST) usan Extended JSON v2 en sus modos canónico y relajado, con las mismas reglas que MongoDB.

Orden de comparación

Dos valores de tipos distintos se comparan por tipo y luego por valor, en el orden de MongoDB: MinKey, null, números, cadenas, documentos, arrays, binarios, ObjectId, booleanos, fechas, Timestamp, expresiones regulares y MaxKey. Los números se comparan por su valor aunque sean de tipos distintos.

Collation

Las comparaciones de texto con collation usan los mismos datos de Unicode que MongoDB 9.0 (ICU 57.1), así que el orden y la igualdad de las cadenas con acentos, mayúsculas o en otros alfabetos coinciden con los de MongoDB.

JavaScript
db.clientes.find({ apellido: "lópez" }).collation({ locale: "es", strength: 1 });

Qué implica para tu aplicación

Tu driver guarda y lee los mismos tipos que con MongoDB. Las consultas y los índices comparan los valores en el mismo orden que MongoDB, y también las ordenaciones: una ordenación con collation da el mismo resultado que en MongoDB 9.0.

Límites

  • Una cadena o un nombre de campo que no es UTF-8 válido se rechaza con InvalidBSON (22). MongoDB lo guarda.
  • Un find sin sort devuelve los documentos en el orden de su clave dentro del rango, que puede ser distinto del de inserción. MongoDB no garantiza ningún orden sin sort; si tu aplicación necesita uno, pídelo con sort.

Más información