【发布时间】:2013-09-14 17:31:44
【问题描述】:
我得到了以下文档结构:
个人资料has_many DailyProviders。 DailyProvider embeds_one朋友。 Friends 有一个整数字段count。
- 注意 DailyProvider
embeds_ONE因为,我不打算存储朋友数组。只是每天的总计数。朋友更多地用于“可读性”。
如何使用聚合框架返回按提供者和日期分组的所有计数的总和?
class Stat::Profile
include Mongoid::Document
has_many :daily_providers, class_name: 'Stat::DailyProvider'
field :profile_id, type: Integer
end
class Stat::DailyProvider
include Mongoid::Document
belongs_to :profile, class_name: 'Stat::Profile'
embeds_one :friends, class_name: 'Stat::DailyProvider::Friend', cascade_callbacks: true
field :provider_name, type: String
field :date, type: Integer, default: Time.zone.now.strftime('%Y%m%d').to_i
validates :provider_name, uniqueness: true, presence: true, inclusion: { in: %w(facebook, linkedin) }
end
class Stat::DailyProvider::Friend
include Mongoid::Document
embedded_in :daily_provider, class_name: 'Stat::DailyProvider'
field :count, type: Integer, default: 0
end
我试过了:
Stat::Profile.first.collection.aggregate(
{ '$unwind' => '$daily_providers' },
{ '$unwind' => '$daily_providers.friends' },
{
'$project' => {
'_id' => 1,
'daily_providers' => '$daily_providers'
}
},
{
'$group' => {
'_id' => {
'date' => '$daily_providers.date'
},
'count' => { '$sum' => '$daily_providers.friends.count' }
}
}
)
但我得到一个空的[]。聚合框架是否仅适用于嵌入在单个集合中的文档?或者它可以与参考文档一起使用吗?
【问题讨论】:
-
因为 MongoDB 没有连接?
-
这是否意味着聚合框架不适用于这样的架构结构?
-
MongoDB 不能跟随对查询或聚合函数中其他集合的引用。只有当前/单个集合。
标签: ruby-on-rails mongodb mongoid ruby-on-rails-4 aggregation-framework