MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta mongoide por valor ou valor padrão


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: