mongodbassociationsmongomapper

Get all keys in MongoMapper Model including its association


Suppose the following model :

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

I want to implement an advanced search that will inspect all value inside my Model including its all association like : I have :

When I search with keyword named "Notebook", I want to search it to Product.name fields and also its associations which mean ProductCategory.name also. So it will returned both of that items, because Product A have ProductCategory.name "Notebook" & Product B have Product.name "aGreatNotebook" and ProductCategory "Notebook"..

How can I do this?? I've already searching for 2 days and not success until now:(.. When is in MySQL, I used join table.. But hows in MongoMapper??

Please help.. Thank you..


Solution

  • You can't do joins in MongoDB. So the basic idea is to get the ObjectId associated with the "Notebook" category and then to query the products where product_category is equal to notebook_id. This generally involves two queries. So that'd be something like this:

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