Rzadka flaga jest trochę dziwna. Aby zrozumieć, kiedy go używać, musisz najpierw zrozumieć, dlaczego „rzadki” istnieje.
Kiedy tworzysz prosty indeks w jednym polu, istnieje wpis dla każdego dokumentu, nawet dokumentów, które nie mają tego pola.
Na przykład, jeśli masz indeks na {rarely_set_field : 1}
, będziesz miał indeks wypełniony głównie null
ponieważ w większości przypadków to pole nie istnieje. To marnowanie miejsca i nieefektywne wyszukiwanie.
{sparse:true}
opcja pozbędzie się null
wartości, więc otrzymasz indeks, który zawiera wpisy tylko wtedy, gdy {rarely_set_field}
jest zdefiniowany.
Wracając do sprawy.
Pytasz o użycie wartości logicznej + sparse. Ale sparse tak naprawdę nie wpływa na wartość „boolean”, sparse effect „jest ustawiony a nie jest ustawiony”.
W twoim przypadku próbujesz pobrać unfinished
. Aby wykorzystać sparse
kluczem nie jest wartość logiczna, ale fakt, że unfinished
wpisy mają ten klucz, a „zakończone” wpisy w ogóle nie mają klucza.
{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished
Wygląda na to, że używasz kolejki
Zdecydowanie możesz wykorzystać powyższe informacje, aby zaimplementować rzadki indeks. Jednak w rzeczywistości brzmi to tak, jakbyś używał kolejki. MongoDB działa jako kolejka, oto dwa przykłady .
Jeśli jednak spojrzysz na kolejkę, nie robią tego w taki sposób, w jaki ty to robisz. Osobiście używam MongoDB jako kolejki dla niektórych systemów produkcyjnych i działa całkiem dobrze, ale przetestuj oczekiwane obciążenie, ponieważ dedykowana kolejka będzie działać znacznie lepiej.