我正在收集數組an_array
和字段a_field
。數組可以是由數值組成(數組可能爲空),它也可以存在於a_field
中。MongoDB集合中的字段和數組的總和
我想要創建一個彙總函數,它將a_field
或an_array
中的值的數量相加。
編輯:例如我想要計算在a_field
和an_array
等中使用1
多少次。
例如,如果我有一些文件,看起來像這樣:
{
a_field: 1,
an_array: [ 1, 3, 4 ],
},
{
a_field: 3,
an_array: [],
}
{
a_field: 2,
an_array: [ 1 ],
}
我想看到像這樣的輸出:
[ { _id: 1, a_count: 1, b_count: 2 }, { _id: 2, a_count: 1, b_count: 0 }, { _id: 3, a_count: 1, b_count: 1 }, { _id: 4, a_count: 0, b_count: 1 } ]
但是我得到的輸出是這樣的:
[ { _id: 1, a_count: 1, b_count: 2 }, { _id: 3, a_count: 1, b_count: 1 }, { _id:4, a_count: 1, b_count: 1 } ]
這是不正確的,因爲它缺少_id
2,和_id
4有太多的數字。
然而,我面臨的問題是,當an_array
爲空時,如果數組爲空,我將無法正確檢索所有計數,並且它會得到a_count
的值,該值不總是與實際的id匹配(如可在_id
4中看到的)。
我到目前爲止是這樣的:
db.getCollection('test').aggregate([
{ $match: {
a_field: {
$ne: null
}
} },
{ $group: {
_id: '$a_field',
a_count: {
$sum: 1
},
an_array: {
$push: {
an_array: '$an_array'
}
}
} },
{ $project: {
an_array: 1,
a_count: 1
} },
{ $unwind: '$an_array' },
{ $unwind: '$an_array.an_array' },
{ $group: {
_id: '$an_array.an_array',
b_count: {
$sum: 1
},
a_count: {
$first: '$a_count'
}
} },
]);
我真的很感激一些投入,因爲我喜歡做在一個單一的聚合。在這一點上,這已經變成了比實際實施更個人化的任務。謝謝!
編輯:我現在綁定到MongoDB 2.6。
爲什麼使用需要應用'$ sum'爲'a_field'如果不是一個數組?在預期的輸出中是什麼'_id'? – styvane
輸出中的_id是當前的'an_array'值之一。這也是我所期望的,我得到一個數字的清單,並有一筆數額。你是什麼意思爲什麼我們需要申請'$ sum'?如果我想繼續指望它被添加的次數,那是唯一的方法,不是嗎? –
其實,你已經向我們展示了3個文檔,並且在你的預期輸出中你有4個。另外,如果你想要的是'an_array'字段中的不同項目,而不等於'a_field',那麼你做錯了。即使不明顯,也有更好的方法來做到這一點。你應該考慮改善你的問題。 – styvane