2014-10-10 42 views
17

这个问题的解决方案可能看起来很简单,但我一直在回答没有答案。Mongoid范围检查如果数组字段包含值

我正在使用Mongoid在我的Rails 4.1.4应用程序。我有一个模型,其中包含一个数组字段,它将包含字符串值。

我需要一个Mongoid的范围模型来检索,其中这个阵列字段包含特定字符串价值,给出的参数范围的情况。比方说,我们有这样的模式:

class SomeModel 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :some_array, type: Array, default: Array.new 

    scope :some_scope, ->(value){ elem_match(some_array: value) } 

end 

以上范围不起作用,因为,很明显,在MongoDB的$ elemMatch需要接收标准。但是,条件怎么会只是说元素必须等于给定的值???。

任何关于如何写这个非常简单的范围的线索???。

Regards !!!。提前致谢。

回答

25

你真是太过于复杂了。如果一个字段拥有一个数组,那么你可以像它不是一个数组一样搜索它。举例来说,如果你有这样一个文件:

{ some_array: [ 'where', 'is', 'pancakes', 'house?' ] } 

和你做这样的查询:

where(:some_array => 'pancakes') 

你会发现文件。您不需要$elemMatch或其他任何复杂的东西;你可以假装阵列是像你这样简单的查询单值有:

scope :some_scope, ->(value) { where(:some_array => value) } 

你只,如果你想多个条件适用于阵列中的每个元素需要进入$elemMatch,像这样的事情从$elemMatch文档:

results: { $elemMatch: { $gte: 80, $lt: 85 } } 
// ^^^^^^^array   ^^^^^^^^^^^^^^^^^^^^^multiple conditions 

不要难过,目前MongoDB的文档是不是这东西十分清楚(或至少我无法找到一个明确的解释)。

+0

没有来到我的想法,它可能是那么简单。让我试试看,如果它确实对我有用,我会告诉你。谢谢!。 – 2014-10-14 12:34:21

+0

完美的作品。谢谢!。 – 2014-10-15 23:27:02