简体   繁体   English

Mongoid - 通过引用文档查询

[英]Mongoid - querying by referenced document

I have a model named Ad which looks like this: 我有一个名为Ad的模型,如下所示:

class Ad
  include Mongoid::Document
  referenced_in :category
end

and Category model: 和类别模型:

class Category
  include Mongoid::Document
  referenced_in :domain
  references_many :ads
end

How can I select Ads by domain? 如何按域选择广告? I have tried to use Ad.where('category.domain_id' => domain.id) but this does not work. 我曾尝试使用Ad.where('category.domain_id' => domain.id)但这不起作用。

The problem is that MongoDB doesn't have any way of mapping a Category record to an Ad record. 问题是MongoDB没有任何方法将Category记录映射到Ad记录。 All it knows is that an Ad record has a category_id field so 'category.domain_id' will always return nothing. 它只知道Ad记录有一个category_id字段,因此'category.domain_id'将始终不返回任何内容。 The dot notation inside queries works only for embedded documents, not references (which are still second-class citizens in MongoDB). 查询中的点表示法仅适用于嵌入式文档,而不适用于引用(它们仍然是MongoDB中的二等公民)。

So to solve your problem, you'll need 2 queries: 因此,要解决您的问题,您需要2个查询:

category_ids = Category.where(:domain_id => domain.id).map(&:_id)
Ad.where(:category_id.in => category_ids)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM