sql >> Databáze >  >> NoSQL >> MongoDB

Mongoidní dotaz podle hodnoty nebo výchozí hodnoty

Chcete-li najít dokumenty, které není mít konkrétní klíč, chcete použít $exists :

Kontrola existence by tedy vypadala takto:

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

Všimněte si, že první :field.exists formulář se stane druhým formulářem před odesláním do MongoDB; Zmiňuji to, protože nebudete moci použít :field jinde v dotazu bez použití $and nebo $or pro kombinaci klauzulí::field.exists rozšíření může vést k tomu, že se klíče v dotazu Hash navzájem přepíší. Tady tento problém mít nebudete, ale připomenutí neuškodí.

Hledá se true je snadné:

Model.where(:field => true)

Chcete-li jeden, zkombinujte je s $or :

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

Pokud :field může tam být, ale má null hodnotu pak můžete použít { :field => nil } pro shodu dokumentů s :field je null nebo tam vůbec ne:

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

Je zde také { :field => { :$type => 10 } } pokud hledáte věci, které tam jsou a explicitně null . Nyní může být vhodný čas na rychlou recenzi MongoDB FAQ:




  1. Kombinujte plný text s jiným rejstříkem

  2. Zpracování přechodných síťových chyb pomocí StackExchange.Redis

  3. Přístup k podsbírce v mongoidu s formulářem kolejnic pro úpravu a vytvoření nového záznamu

  4. Výukový program Hadoop MapReduce pro začátečníky