0

我有一个模型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)

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

4

1 回答 1

1

你错过了两件事:

  1. Mongoid 不是 ActiveRecord,因此它不知道todo_idsTag查询中如何处理。
  2. 'todo_id.in'是一个字段路径,它试图查看散列中的in字段todo_id,这不是 MongoDB$in运算符的使用。

您一次只能使用一个集合,因此要修复第一个集合,您需要从 MongoDB 中提取一组 ID:

todo_ids = Todo.where(user_id: '86876876787').pluck(:id)
# -------------------------------------------^^^^^^^^^^^

要修复第二个,请使用$in运算符:

tags = Tag.where(todo_id: { '$in': todo_ids })
tags = Tag.where(:todo_id.in => todo_ids)
tags = Tag.in(todo_id: todo_ids)
#...
于 2016-07-18T17:09:32.300 回答