加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Mongoid Scope检查数组字段是否包含值

发布时间:2020-12-16 20:28:40 所属栏目:百科 来源:网络整理
导读:这个问题的解决方案可能看起来很简单,但是我一直在挥舞着没有回答. 我在我的Rails 4.1.4应用程序中使用Mongoid.我有一个包含一个Array字段的模型,它将容纳String值. 我需要一个Mongoid的范围在模型中检索这个Array字段包含一个特定的String值,作为范围参数给
这个问题的解决方案可能看起来很简单,但是我一直在挥舞着没有回答.

我在我的Rails 4.1.4应用程序中使用Mongoid.我有一个包含一个Array字段的模型,它将容纳String值.

我需要一个Mongoid的范围在模型中检索这个Array字段包含一个特定的String值,作为范围参数给出的那些实例.假设我们有这个模型:

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中显然需要收到一个Criteria作为值.但是,标准如何只是说元素必须等于给定的值?

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

问候!!!.提前致谢.

解决方法

你是非常复杂的事情.如果一个字段保存一个数组,那么您可以搜索它,就好像它不是一个数组.例如,如果您在文档中有这样的内容:
{ 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文档在这个东西上还不完全清楚(或至少我找不到明确的解释).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读