Doporučuje se, pokud je to pro daný případ použití možné, což obvykle není. Údaje z časových řad jsou výraznou výjimkou. S $addToSet
to ve skutečnosti neplatí a $push
protože mají tendenci zvětšovat velikost dokumentu zvětšováním pole.
Stop. Jste si jisti, že chcete neustále rostoucí pole s desítkami tisíc položek? Budete se ptát a chcete zpět konkrétní položky? Chystáte se indexovat nějaká pole v položkách pole? Pravděpodobně budete chtít přehodnotit strukturu dokumentu. Možná budete chtít každé data
záznam jako samostatný dokument s poli jako market
, type
, createdAt
replikovány v každém? Nemusíte si dělat starosti s přesuny dokumentů.
Proč pole naroste na 75 tisíc položek? Můžete udělat méně záznamů na jeden dokument? Jsou toto údaje časové řady ? Je skvělé mít možnost předběžně přidělovat dokumenty a provádět aktualizace na místě pomocí modulu úložiště mmap, ale není to možné pro každý případ použití a není to požadavek, aby MongoDB fungoval dobře.
Ne, to opravdu není užitečné. Velikost dokumentu bude vypočítána na základě velikosti BSON hodnot null v poli, takže když nahradíte null
s jiným typem se velikost zvětší a stejně se přepíše dokument. Pole byste museli předem alokovat s objekty se všemi poli nastavenými na výchozí hodnotu pro jeho typ, např.
{
"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
}