A bandeira esparsa é um pouco estranha. Para entender quando usá-lo, você precisa entender por que "esparso" existe em primeiro lugar.
Quando você cria um índice simples em um campo, há uma entrada para cada documento, mesmo para documentos que não tenham esse campo.
Por exemplo, se você tiver um índice em
{rarely_set_field : 1}
, você terá um índice preenchido principalmente com null
porque esse campo não existe na maioria dos casos. Isso é um desperdício de espaço e é ineficiente pesquisar. O
{sparse:true}
opção irá se livrar do null
valores, então você obtém um índice que contém apenas entradas quando {rarely_set_field}
é definido. Volte ao seu caso.
Você está perguntando sobre o uso de um booleano + esparso. Mas esparso não afeta realmente "boolean", efeito esparso "está definido vs. não está definido".
No seu caso, você está tentando buscar
unfinished
. Para aproveitar o sparse
a chave não é o valor booleano, mas o fato de que unfinished
as entradas têm essa chave e as entradas "terminadas" não têm chave nenhuma. { _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished
Parece que você está usando uma fila
Você pode definitivamente aproveitar as informações acima para implementar um índice esparso. No entanto, parece que você está usando uma fila. O MongoDB pode ser reparado como uma fila, aqui estão dois exemplos .
No entanto, se você olhar para a Fila, eles não estão fazendo isso do jeito que você está fazendo. Pessoalmente, estou usando o MongoDB como uma fila para alguns sistemas de produção e ele funciona muito bem, mas teste sua carga esperada, pois uma fila dedicada terá um desempenho muito melhor.