Řídká vlajka je trochu zvláštní. Abyste pochopili, kdy jej použít, musíte nejprve pochopit, proč „řídký“ existuje.
Když vytvoříte jednoduchý rejstřík pro jedno pole, je zde záznam pro každý dokument, dokonce i pro dokumenty, které toto pole nemají.
Pokud máte například index na {rarely_set_field : 1}
, budete mít index, který je většinou vyplněn null
protože toto pole ve většině případů neexistuje. Je to plýtvání místem a vyhledávání je neefektivní.
{sparse:true}
volba zbaví null
hodnot, takže získáte index, který obsahuje pouze položky, když {rarely_set_field}
je definováno.
Zpět k vašemu případu.
Ptáte se na použití boolean + sparse. Ale řídký vliv ve skutečnosti neovlivňuje "boolean", řídký vliv "je nastaven vs. není nastaven".
Ve vašem případě se pokoušíte načíst unfinished
. Chcete-li využít sparse
klíčem není booleovská hodnota, ale skutečnost, že unfinished
položky mají tento klíč a ty "dokončené" položky nemají žádný klíč.
{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished
Zdá se, že používáte frontu
Výše uvedené informace můžete určitě využít k implementaci řídkého indexu. Ve skutečnosti to však zní, jako byste používali frontu. MongoDB lze provozovat jako frontu, zde jsou dva příklady .
Pokud se však podíváte na frontu, nedělají to tak, jak to děláte vy. Osobně používám MongoDB jako frontu pro některé produkční systémy a běží docela dobře, ale otestujte očekávané zatížení, protože vyhrazená fronta bude fungovat mnohem lépe.