【问题标题】:Mongoid query for array field数组字段的 Mongoid 查询
【发布时间】:2013-11-20 23:34:18
【问题描述】:

我在 Mongoid 中有一个 type Array 的 category 字段。

例如。类别:["val1","val2","val3"]

现在我想用 `category: ["val1","val2"] 查询这个模型,这样它就返回了

的合并

Model.where(category: "val1") 和 Model.where(category: "val2")

我可以为数组的每个元素单独执行此操作,但我猜这会很慢,因为对于每个单独的元素,它将搜索所有文档。

我也尝试过Model.all_of({category: "val1"},{category: "val2"}).all,但这不起作用。

我应该怎么做?

【问题讨论】:

  • 三读希望更准确。试试:Model.select{|m|m.category.include?("val1") || m.category.include?("val2")}(前提是 category 字段永远不是 nil 值)。
  • 第一个更加健壮和简单

标签: ruby-on-rails mongoid


【解决方案1】:

或其他变体:

Model.in(category: ['val1','val2'])

【讨论】:

    【解决方案2】:

    成功了

    Model.where(:category.in => ['val1','val2'])
    

    来自Mongo Docs

    【讨论】:

      【解决方案3】:

      您可以使用Criteria all_in 使其更简单:

      Model.all_in(category: ['val1','val2'])
      

      【讨论】:

        【解决方案4】:

        在 mongoid 中,有 '$in' 运算符。所以你可以这样做:

        Model.where(category: { '$in': ['val1', 'val2'] })
        

        【讨论】:

        • 这给了我一个语法错误。我不得不使用: Model.where(category: { '$in' => ['val1', 'val2'] }) 注意使用 '=>' 而不是 ':'
        • @AhmedFathy:或者直接说Model.where(:category.in => ['val1', 'val2'])。 Mongoid 为其他 MongoDB 运算符为 Symbol 添加了类似的方法::f.ne => ...、:f.gt => ...、...
        猜你喜欢
        • 2011-05-13
        • 1970-01-01
        • 2012-01-06
        • 2017-04-16
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多