4
我试图带回一个包含用于描述博客帖子的计数的年/月组合列表。这个想法是,它们将显示如下所示:MongoDB Group使用Ruby驱动程序
- 2010年1月(1篇文章)
- 2009年12月(2个)
- ...
我设法得到这个使用MongoDB的JS壳工作,并返回一个有用的格式结果:
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)
用之于有用的数据的好的阵列,我m如果这个烂摊子:(!和我的源代码的理解)
{
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }" => nil,
"count" => 4.0
}
看来,要么是完全无视自己的文档或我在这里失去了一些东西根本。我几乎把我的头发拉出来,任何帮助感激地接受。
我检查了版本,我安装了0.18和0.18.2。我已经删除了旧版本和更新的MongoMapper(我依赖于0.18版本)。问题依然存在。我也曾尝试过只使用驱动程序,在我的情况下它仍然失败。我不明白为什么它对你的行为会比对我的行为不同? 编辑:尝试在自己的脚本中,因为你有正确的结果。它似乎只在我的Rails应用程序中失败。 –
嗯。不知道Rails可能会对此产生什么影响。我认为最好的办法是为我和John(MongoMapper)创建一个完整的失败测试用例。 –
哦,我一直是一个巨大的枕头。原来是0.18到0.18.2之间的版本差异。我忘了重新启动dev服务器后,我删除了旧的宝石,并更新了一切。回过头来看看github上的0.18源代码,我发现在0.18.2之间增加了对keyf代码的支持,并且确实修复了它。我觉得适当愚蠢:) –