Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在rails中使用mongoid进行分组_Mongodb_Ruby On Rails 4_Mongoid - Fatal编程技术网

Mongodb 在rails中使用mongoid进行分组

Mongodb 在rails中使用mongoid进行分组,mongodb,ruby-on-rails-4,mongoid,Mongodb,Ruby On Rails 4,Mongoid,我正在使用mongoid和rails4,我需要按结果分组以提供图表(统计屏幕),我正在使用下面的代码 @comments_stats = {} comments_data = Comment.where(:created_at.lte => Date.today-10.days).group_by {|d| d.created_at.to_date } comments_data.map{ |a| @comments_stats[a[0].strftime("%

我正在使用mongoid和rails4,我需要按结果分组以提供图表(统计屏幕),我正在使用下面的代码

    @comments_stats = {}

    comments_data = Comment.where(:created_at.lte => Date.today-10.days).group_by {|d| d.created_at.to_date }

    comments_data.map{ |a| @comments_stats[a[0].strftime("%d-%m-%y")] = a[1].size}
它会给人一种感觉

{
"1-1-2014" => 2,
"3-1-2014" => 1,
"4-1-2014" => 2,
"6-1-2014" => 4

}
但我想要下面这样

{
"1-1-2014" => 2,
"2-1-2014" => 0,
"3-1-2014" => 1,
"4-1-2014" => 2,
"5-1-2014" => 0,
"6-1-2014" => 4

}
任何人都可以建议如何简化上述查询

谢谢
普拉萨德。

您可以尝试以下方法:

@comments_stats = {}
last_date = Date.today - 10.days

comments_data = Comment.where(:created_at.lte => last_date).group_by {|d| d.created_at.strftime("%d-%m-%y")}
first_date = Date.parse(comments_data.keys.min)

(first_date..last_date).map do |n_date|
  day = n_date.strftime("%d-%m-%Y")
  @comments_stats[day] = comments_data[day] ? comments_data[day].size : 0
end

我还没有测试它,所以它可能会有一些问题

也可以使用
select
而不是map来进一步缩小范围