Mongoid按值或默认值查询

时间:2014-01-15 16:54:10

标签: mongodb mongoid

我刚刚使用布尔字段更新了我的一个模型。我已将字段的默认值设置为true。如何查询此字段,以便将此字段设置为true或没有此字段的所有文档(默认值)。

1 个答案:

答案 0 :(得分:4)

要查找具有特定密钥的文档,您需要使用$exists

  

<强> $存在
  语法{ field: { $exists: <boolean> } }

     如果$exists为true,

<boolean>会选择包含该字段的文档。如果<boolean>为false,则查询仅返回不包含该字段的文档。 $exists确实匹配包含存储null值的字段的文档。

所以存在检查看起来像:

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

请注意,第一个:field.exists表单在发送到MongoDB之前成为第二个表单;我之所以提到这一点,是因为如果不使用:field$and来合并子句,您将无法在查询的其他位置使用$or:field.exists扩展可能会导致密钥在查询Hash中互相覆盖。你不会在这里遇到这个问题,但提醒不会受到伤害。

寻找true很简单:

Model.where(:field => true)

你想要任何一个,所以将它们与$or结合起来:

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

如果:field可能存在null,但您可以使用{ :field => nil }来匹配:fieldnull 或<的文档/ strong>根本不存在:

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

如果您正在寻找明确{ :field => { :$type => 10 } } 的内容,还有null。现在可能是快速浏览MongoDB FAQ的好时机:

  

How do I query for fields that contain null values?