我試圖對mongodb 2.0.1中每個組的元素數量進行分組和計數,但目前爲止沒有成功。MongoDB中的組和計數
我的DB模式是這樣的:
{
"_id" : ObjectId("4ece7544853b4b0941000000"),
"ResultSet" : {
"Results" : [
{
"quality" : 87,
"state" : "Franche-Comté"
}
]
}
}
我一直很努力的所有排序的方法,以下不同的教程,但每次它是同樣的結果:一個只有空組...我不要不明白爲什麼。
到目前爲止,我還寫過的最好的查詢如下:
db.extract_2000.group({
cond: { "ResultSet.Results.quality": {$exists: true} },
key: {"ResultSet.Results.state": true},
reduce: function(obj, glob) { glob.total++; glob.quality += obj.ResultSet.Results.quality },
initial: { total: 0, quality: 0 },
finalize: function(glob) {glob.avgquality = glob.quality/glob.total}
})
它返回(再次):
[
{
"ResultSet.Results.state" : null,
"total" : 2000,
"quality" : NaN,
"avgquality" : NaN
}
]
我在做什麼錯?
我不確定你想要實現什麼 - 不知何故,你試圖將嵌入式文檔而不是文檔分組?我認爲這不會起作用,並且就我所見,每個嵌入式文檔都不會遵守'$ exists'條件。你是否嘗試過使用一個簡單的對象而不是帶有一個子對象數組的對象?計數('總數')可以嗎? – mnemosyn
總數可以,我在數據庫中有2000個文檔。我嘗試按照ResultSet.Results.state進行分組。 –
那麼,你有2000 *文檔*,但這意味着你的reduce函數將不得不手動迭代子文檔數組,不是嗎?表達式'obj.ResultSet.Results.quality'不能在reduce函數中進行求值,我認爲:'結果'是一個數組,但是您像使用普通對象一樣使用它。我認爲這是罪魁禍首。 – mnemosyn