首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于关联Id阵列的蒙古搜索

基于关联Id阵列的蒙古搜索
EN

Stack Overflow用户
提问于 2015-03-11 15:55:41
回答 2查看 948关注 0票数 1

我有一个Rails 4.2,Mongoid4项目,其中有以下模型:

代码语言:javascript
复制
class Customer #aka Company
  include Mongoid::Document

  has_many :branches
end

class Branch
  include Mongoid::Document  

  field :name, type: String, default: ""

  belongs_to :customer
end

我想找到所有的客户(也叫公司),他们都有一个叫“纽约”的分支机构。我认为这个代码会起作用:

代码语言:javascript
复制
branches = Branch.where(name: "New York").map(&:_id)
=> [BSON::ObjectId('54f76cef6272790316390100')]
Customer.where(:branch_ids => branches).entries

但是,无论我尝试什么,它总是返回一个空数组。代替branch_ids,我还尝试了branchesbranchbranches_id和其他,但都没有用。我还尝试将BSON::ObjectID转换为普通string,但这也不起作用。

因此,基本上,如何根据关联ids数组搜索模型?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-11 16:17:12

如果关系是

客户has_many :branches

分支belongs_to :customer

然后分支集合将有一个customer_id列,而不是相反的列。所以你可以

代码语言:javascript
复制
cust_ids = Branch.where(name: "New York").map(&:customer_id)
Customer.find(cust_ids)

由于您只需要第一个查询中的客户it,因此建议使用pluck。

代码语言:javascript
复制
cust_ids = Branch.where(name: "New York").pluck(:customer_id)
票数 1
EN

Stack Overflow用户

发布于 2015-03-11 17:27:41

您可以这样使用Symbol#elem_match

代码语言:javascript
复制
Customer.where(:branches.elem_match => { name: "New York" })

Queryable#elem_match是这样的:

代码语言:javascript
复制
Customer.elem_match(branches: { name: "New York" })

这两个查询都将返回“纽约”分支机构的客户。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28991420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档