我有3个依赖模型 Mongoid :
class Account
has_many :apps
end
class App
belongs_to :account
has_many :devices
end
class Device
belongs_to :app
end
我想获取所有属于帐户的设备元素,但设备和帐户之间的关系是通过模型应用
在 ActiveRecord 环境中,它会是这样的:
scope :for_account, ->(account) { joins(:app).where("app.account = ?", account) }
如何使用Mongoid执行此操作?
答案 0 :(得分:1)
我可以想到两种方法来解决这个问题。
Mongoid关系为我们提供了一套非常丰富的方法来帮助我们访问对象。
例如:
app.account #returns account object
app.account_id #returns bson id of account object
account.apps #returns collection of apps
account.app_ids #returns array of app bson ids
我们可以使用此功能,因此查找应用ID的所有设备都包含在帐户的应用ID列表中。类似的东西:
Device.where(app_id: { '$in' => account.app_ids})
这将返回一个很好的集合,就像任何其他mongo查询一样,但是具有搜索整个Device集合的缺点。根据您的数据库大小,这可能会让您感到不舒服。
可替换地:
account.apps.collect{ |a| a.devices}.flatten
将提供从帐户中的所有应用收集的设备项的数组。
这样做的好处是搜索效率更高,而且阵列很可能适用于您需要此集合的任何内容。
希望这有帮助!