Det sparsomme flag er lidt underligt. For at forstå, hvornår du skal bruge det, skal du forstå, hvorfor "sparse" eksisterer i første omgang.
Når du opretter et simpelt indeks på ét felt, er der en post for hvert dokument, selv dokumenter, der ikke har det felt.
For eksempel, hvis du har et indeks på {rarely_set_field :1}
, vil du have et indeks, der for det meste er fyldt med null
fordi det felt ikke eksisterer i de fleste tilfælde. Dette er spild af plads, og det er ineffektivt at søge.
{sparse:true}
option vil slippe af med null
værdier, så du får et indeks, der kun indeholder poster, når {sjældent_sæt_felt er defineret.
Tilbage til din sag.
Du spørger om at bruge en boolean + sparse. Men sparse påvirker ikke rigtig "boolesk", sparsom effekt "er sat vs. er ikke indstillet".
I dit tilfælde forsøger du at hente ufærdige
. For at udnytte sparse
nøglen er ikke den boolske værdi, men det faktum, at unfinished
poster har den nøgle, og at "færdige" poster slet ikke har nogen nøgle.
{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished
Det lyder som om du bruger en kø
Du kan helt sikkert udnytte oplysningerne ovenfor til at implementere et sparsomt indeks. Det lyder dog faktisk som om du bruger en kø. MongoDB kan bruges som en kø, her er to a> eksempler .
Men hvis du ser på køen, gør de det ikke, som du gør det. Jeg bruger personligt MongoDB som en kø for nogle produktionssystemer, og det kører ret godt, men test din forventede belastning, da en dedikeret kø vil fungere meget bedre.