查询mongoid哈希字段时使用IN

时间:2014-12-18 14:14:15

标签: ruby-on-rails mongodb hash hashmap mongoid

我在Mongoid上查询哈希字段,哈希字段的名称是keys,哈希看起来像这样

{"location_id" => "id", "subscriber_id" => "id"}

现在我有一个位置ID数组,我想获取具有这些位置ID的所有记录,我已尝试将其与where一起使用,但它不起作用

Variation.where({"keys.subscriber_id" => "id", "keys.location_id" => [location_ids]})

我也尝试了"keys.location_id".in => [location_ids],但它的抛出语法错误。请帮忙!

1 个答案:

答案 0 :(得分:2)

inne等查询方法已添加到Symbol,而不是String。所以你可以说:

:'keys.location_id'.in => location_ids

其中location_ids是一个数组。此外,查询方法只是构建较长的本机样式嵌套Hash查询的简短形式。例如,如果你说:

:field.op => value

对于某个运算符op,然后Mongoid实际上将此(JavaScript)发送到MongoDB:

field: { $op: value }

因此,如果您不想写:'keys.location_id'.in,那么您可以说:

'keys.location_id' => { :$in  => location_ids }
# or
'keys.location_id' => { '$in' => location_ids }

代替。

另请注意,如果location_ids是一个数组,那么[location_ids]是一个数组数组,这不是您在查询中想要的数组,您只需要location_ids如上所述。