2

我有这个模型:

class Document1
  field privacy
  has_many events, :as => :target
end

class Document2
  field privacy
  has many_events, :as => :target
end

class Event
  belongs_to :target, :polymorphic => true
end

我需要做类似的事情:

Event.where( :target.privacy => :public )

我该怎么做?

4

2 回答 2

4

您无法从 Mongodb 的关系表中查询字段。Mongodb没有join的概念。此外,点符号对您不起作用,因为您使用的是 abelongs_to而不是 a embedded_in。所以你在这里有几个选择,你可以改变你的模式来使用嵌入式关系,或者你可以在 3 个单独的查询中做到这一点,如下所示:

ids = Document1.where(privacy: :public).pluck(:id) + Document2.where(privacy: :public).pluck(:id)
Event.where(target_id: ids).to_a

我的建议是检查您的架构,以更好地利用嵌入式关系,但这取决于您的用例。

于 2013-09-16T15:31:55.583 回答
0

您可能想查看MongoDB 中用于嵌入式文档的点表示法

于 2013-09-16T12:49:24.013 回答