次のドキュメント構造を取得しました。
プロファイルhas_many
DailyProviders。デイリープロバイダー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' }
}
}
)
しかし、私は空の[]
. 集約フレームワークは、単一のコレクションに埋め込まれたドキュメントでのみ機能しますか? または、参照ドキュメントで機能しますか?