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代碼的支持,並且確實修復了它。我覺得適當愚蠢:) –