MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Query mongoide per valore o valore predefinito

Per trovare documenti che non hai una chiave particolare, vuoi usare $exists :

Quindi il controllo di esistenza sarebbe simile a:

Model.where(:field.exists => false)
Model.where(:field => { :$exists => false })

Nota che il primo :field.exists il modulo diventa il secondo modulo prima di essere inviato a MongoDB; Lo dico perché non sarai in grado di utilizzare :field altrove nella query senza utilizzare $and o $or per combinare le clausole:il :field.exists l'espansione può portare a chiavi nella query Hash che si sovrascrivono a vicenda. Non avrai questo problema qui, ma un promemoria non può far male.

Cerco true è facile:

Model.where(:field => true)

Ne vuoi uno, quindi combinali con $or :

Model.where(:$or => [
  { :field.exists => false },
  { :field        => true  }
])

Se :field potrebbe essere presente ma avere un null valore quindi potresti usare { :field => nil } per abbinare i documenti in cui :field è null o non c'è affatto:

Model.where(:$or => [
  { :field => null  },
  { :field => true  }
])
# or
Model.where(:field.in => [ null, true ]) # This is probably the one you want

C'è anche { :field => { :$type => 10 } } se stai cercando cose che ci sono e esplicitamente null . Ora potrebbe essere un buon momento per una rapida revisione delle FAQ di MongoDB: