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: