【问题标题】:Mongoid: select embedded objects that fits number of optionsMongoid:选择适合多个选项的嵌入对象
【发布时间】:2011-09-12 14:34:42
【问题描述】:

我有这个结构

class House
  include Mongoid::Document
  embeds_many :inhabitants
end

class Inhabitant
  include Mongoid::Document
  embedded_in :house
  field :name
  field :gender
  field :age
end

我可以得到所有女性居住的房子:

houses = House.where("inhabitants.gender" => "female")

但是我怎样才能得到所有 50 岁以下女性居住的房子呢?如何为嵌入对象指定多个条件?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 mongodb mongoid


    【解决方案1】:

    要将多个条件应用于数组中的每个条目,您应该使用$elemMatch 运算符。我不熟悉 Mongoid,但这里是修改为使用 $elemMatch 的查询的 MongoDB shell 语法:

    > db.house.find({inhabitants: {$elemMatch: {gender: "female", age: {$lt: 50}}}})
    

    【讨论】:

    • 就是这样!谢谢! Mongoid 语法:House.where({inhabitants: {"$elemMatch" => {gender: "female", age: {"$lt" => 50}}}})
    • 替代 Mongoid(起源)语法:House.elem_match(inhabitants: {gender: 'female', :age.lt => 50})
    • @dcrosta 过去 2 个小时我一直在苦苦挣扎……感谢您的解决方案。我也有类似的情况。
    【解决方案2】:

    试试这个:

    houses = House.where("inhabitants.gender" => "female", "inhabitants.age" => {"$lt" => 50})
    

    组合条件: MongoDB 查询:

    db.houses.find({'inhabitants.age' : {$in: {$lt: 50}}})
    

    Mongoid:

    houses = House.where('inhabitants.age' => {'$in' => {'$lt' => 50}})
    

    【讨论】:

    • 我已经试过了。但这会搜索所有居民,而不是每个人。
    • 您要获取至少有 1 位 50 岁以下女性居住的所有房屋?
    • 是的。实际上我想知道如何通过多个选项获取嵌入式对象。
    猜你喜欢
    • 1970-01-01
    • 2013-05-06
    • 2013-03-26
    • 2022-09-23
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2022-01-07
    • 2011-06-02
    相关资源
    最近更新 更多