如何通过关联Mongoid 4查找所有文档

时间:2016-07-18 14:40:58

标签: mongoid mongoid4

我有一个模型Tag,它可能属于其他几个模型,但目前只有一个模型Todo依次属于User

class User
  include Mongoid::Document
  field: name,  type: String
  has_many :todos
end

class Todo
  include Mongoid::Document
  field: name,  type: String
  belongs_to :user
end

class Tag
  include Mongoid::Document
  field: name,  type: String
  belongs_to :todos
end

如何查询属于特定用户的所有Tags?我写了以下内容:

todo_ids = Todo.where(user_id: '86876876787')

然后:

tags = Tag.where('todo_id.in': todo_ids)

但那些没有用。我错过了什么?

1 个答案:

答案 0 :(得分:1)

你错过了两件事:

  1. Mongoid不是ActiveRecord,所以它不知道如何处理todo_ids查询中的Tag
  2. 'todo_id.in'是一个字段路径,它试图查看in哈希中的todo_id字段,这不是对MongoDB {{1}的使用}} operator。
  3. 您一次只能处理一个集合,以便修复第一个集合,您需要从MongoDB中提取一系列ID:

    $in

    要修复第二个,请使用todo_ids = Todo.where(user_id: '86876876787').pluck(:id) # -------------------------------------------^^^^^^^^^^^ 运算符:

    $in