2012-05-09 53 views
0

假设以下模型:获取MongoMapper型号的所有按键,包括其关联

class Product 
include MongoMapper::Document 

key :name, String 
key :product_category_id, ObjectId 

belongs_to :product_category 
end 

class ProductCategory 
include MongoMapper::Document 

key :name, String, :required => true, :unique => true 

timestamps! 
userstamps! 
end 

我想要实现一个先进的搜索,将检查我的模型内的所有价值,包括它像所有的关联关系: 我:

  • 产品名为“aLaptop”的数据belongs_to:ProductCategory,名为“Notebook”。
  • 产品B数据名为“aGreatNotebook”belongs_to:ProductCategory名为“Notebook”。

当我使用名为“Notebook”的关键字进行搜索时,我想将其搜索到Product.name字段及其关联,也就是ProductCategory.name。因此,它将返回这两个项目,因为产品A有ProductCategory.name“笔记本”&产品B有Product.name“aGreatNotebook”和ProductCategory“Notebook”..

我该怎么做?我已经寻找了2天,没有成功到现在为止:(..如果是在MySQL中,我使用的连接表。但怎么样了在MongoMapper ??

请帮助..谢谢..

回答

0

你不能在MongoDB中进行连接,所以基本的想法是将ObjectId与“Notebook”类关联起来,然后查询product_category等于notebook_id的产品,这通常涉及两个查询。像这样:

notebook_id = ProductCategory.first(:name => "Notebook") 
if notebook_id 
    Product.where({:product_category_id => notebook_id['_id']}) 
end 
+0

感谢凯尔银行家..那正是我在想,但怎么样,如果有在产品众多的关联像“品牌”无论是不是“PRODUCT_CATEGORY” ..这意味着我们必须为每个模型查询3次以获得它的_ids? (1.查询ProductCategory._ids,Brand._ids,Product).. –

+0

不是,您可以使用$ in。 ids = ProductCategory.where(:name => {:$ in => [“Notebook”,“Brands”]})。除非我误解你的问题... –

+0

不,我的意思是'品牌'是另一种模式,像'苹果,三星等':) ..而ProductCategoy就像'笔记本,打印机等..'..但他们都与'产品'模型相关联。 我在想的是如何获得产品,产品类别和品牌模型的所有密钥,以便我可以使用只使用单个查询:)搜索.. .. –