Para encontrar documentos que não tiver uma chave específica, você deseja usar
$exists
:Assim, a verificação de existência ficaria assim:
Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })
Observe que o primeiro
:field.exists form se torna o segundo formulário antes de ser enviado ao MongoDB; Menciono isso porque você não poderá usar :field em outro lugar na consulta sem usar $and ou $or para combinar as cláusulas:o :field.exists expansão pode levar a chaves na consulta Hash sobrescrevendo umas às outras. Você não terá esse problema aqui, mas um lembrete não faz mal. Procurando por
true é fácil:Model.where(:field => true)
Você quer qualquer um, então combine-os com
$or
:Model.where(:$or => [
{ :field.exists => false },
{ :field => true }
])
Se
:field pode estar lá, mas tem um null valor, então você pode usar { :field => nil } para corresponder a documentos em que :field é null ou não existe de jeito nenhum:Model.where(:$or => [
{ :field => null },
{ :field => true }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want
Há também
{ :field => { :$type => 10 } } se você estiver procurando por coisas que estão lá e explicitamente null . Agora pode ser um bom momento para uma rápida revisão do FAQ do MongoDB: