MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Requête mongoid par valeur ou valeur par défaut

Pour trouver des documents qui ne sont pas avez une clé particulière, vous souhaitez utiliser $exists :

Ainsi, la vérification d'existence ressemblerait à :

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

Notez que le premier :field.exists form devient le deuxième formulaire avant d'être envoyé à MongoDB ; Je le mentionne car vous ne pourrez pas utiliser :field ailleurs dans la requête sans utiliser $and ou $or pour combiner les clauses :le :field.exists l'expansion peut conduire à ce que les clés de la requête Hash s'écrasent les unes les autres. Vous n'aurez pas ce problème ici mais un rappel ne peut pas faire de mal.

Recherche true est facile :

Model.where(:field => true)

Vous voulez l'un ou l'autre, alors combinez-les avec $or :

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

Si :field peut être là mais avoir un null value alors vous pouvez utiliser { :field => nil } pour faire correspondre les documents où :field est null ou pas là du tout :

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

Il y a aussi { :field => { :$type => 10 } } si vous cherchez des choses qui sont là et explicitement null . Le moment est peut-être venu de passer rapidement en revue la FAQ de MongoDB :