我正在尝试带回用于描述博客文章的年份/月份组合列表。我们的想法是它们将像这样显示:
- 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}
})
结果:
[ { "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
}
似乎它要么完全违背了它自己的文档(以及我对源代码的理解!),要么我在这里遗漏了一些基本的东西。我几乎把头发拔了,任何帮助都感激地接受。