我正在尝试带回一个包含用于描述博客文章的计数的年/月组合列表。我们的想法是,它们将像这样显示:
- 2010 年 1 月(1 篇文章)
- 2009 年 12 月(2 个职位)
- ...
我已经设法使用 MongoDB JS shell 让它工作,并且它以有用的格式返回结果:
db.posts.group({
keyf: function(x){
return {
month: x.datetime.getMonth(),
year:x.datetime.getFullYear()
};
},
reduce: function(x,y){ y.count++ },
initial:{count:0}
})
Results:
[ { "month" : 0, "year" : 2010, "count" : 3 },
{ "month" : 0, "year" : 1970, "count" : 1 } ]
这太棒了,正是我所追求的。但是,尝试将其转换为适合 ruby 驱动程序的代码,我无法让它工作。我查看了文档,根据我的理解,以下内容应该产生相同的结果(我正在使用 MongoMapper,因此Post.collection
):
@archive = Post.collection.group(
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }",
nil, { :count => 0 }, 'function(x,y){y.count++}', true)
我没有返回大量有用的数据,而是陷入了混乱:
{
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }" => nil,
"count" => 4.0
}
看来,要么它完全违背了它自己的文档(以及我对源代码的理解!),要么我在这里遗漏了一些基本的东西。我几乎要拔掉头发了,感激地接受任何帮助。