Mongoid多对多查询返回不是文档

时间:2011-12-21 02:15:32

标签: mongodb mongoid

我是Mongo和Mongoid的新手,并且有一个相当复杂的数据模型,我试图基本上查询多对多关系并且没有获得任何数据,即使我已经验证了id似乎匹配。

数据模型如下(如果有更好的方法,欢迎提出建议):

class User  
  has_one :item_list  #favorite items  
  has_one :store_list #favorite stores  

class ItemList  
  belongs_to :user  
  has_and_belongs_to_many :items  

class StoreList  
  belongs_to :user  
  has_and_belongs_to_many :stores  

class Item  
  belongs_to :artist  
  has_and_belongs_to_many :stores  
  has_and_belongs_to_many :item_lists  

class Store  
  has_many :versions  
  has_and_belongs_to_many :store_lists  

class Version  
  belongs_to :item  
  belongs_to :store  

关于我在线阅读的建议,我试图在特定商店的用户收藏列表中获取项目的版本(虽然只留下特定的商店部分,因为甚至无法浏览整个版本的列表),如下所示:

@favorite_item_ids = current_user.item_list.items.only(:_id).map(&:_id)  
@my_items_here = Version.all_in(item_id: @favorite_item_ids)

我正在打印出id,因此应至少匹配一次,但@my_items_here的长度为0

@favorite_item_ids
[BSON :: ObjectId('4ede1ec254663443fe000011'),...]

Version.all.only(:ITEM_ID).MAP(安培;:ITEM_ID)
[BSON :: ObjectId('4ede1ec254663443fe000011'),...]

感谢任何帮助!

版本: mongoid 2.3.4宝石 mongo 2.0.1 Rails 3.1

1 个答案:

答案 0 :(得分:1)

试试这个:

@favorite_item_ids = current_user.item_list.items.distinct(:_id)  
@my_items_here = Version.where(:item_id.in => @favorite_item_ids)