sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB:¿Debería preasignar un documento si usa $addToSet o $push?

Se recomienda si es factible para el caso de uso, que normalmente no lo es. Los datos de series temporales son una excepción notable. Realmente no se aplica con $addToSet y $push porque tienden a aumentar el tamaño del documento al hacer crecer una matriz.

Deténgase. ¿Está seguro de que desea matrices en constante crecimiento con decenas de miles de entradas? ¿Va a consultar si desea recuperar entradas específicas? ¿Va a indexar algún campo en las entradas de la matriz? Probablemente desee repensar la estructura de su documento. Tal vez quieras cada data la entrada debe ser un documento separado con campos como market , type , createdAt replicado en cada uno? No se preocuparía por los movimientos de documentos.

¿Por qué la matriz crecerá a 75 000 entradas? ¿Se pueden hacer menos entradas por documento? ¿Son estos datos de series temporales ? Es fantástico poder preasignar documentos y realizar actualizaciones en el lugar con el motor de almacenamiento mmap, pero no es factible para todos los casos de uso y no es un requisito para que MongoDB funcione bien.

No, esto no es realmente útil. El tamaño del documento se calculará en función del tamaño BSON de los valores nulos en la matriz, por lo que cuando reemplace null con otro tipo, el tamaño aumentará y obtendrá reescrituras de documentos de todos modos. Deberá preasignar la matriz con objetos con todos los campos establecidos en un valor predeterminado para su tipo, por ejemplo,

{
    "date" : ISODate("1970-01-01T00:00:00Z")    // use a date type instead of a string date
    "price" : 0,
    "amount" : 0,
    "tid" : "000000", // assuming 7 character code - strings icky for default preallocation
    "type" : "none"    // assuming it's "buy" or "sell", want a default as long as longest real values
}