我試圖計算一個特定值在集合中出現了多少次。
{
_id:1,
field1: value,
field2: A,
}
{
_id:2,
field1: value,
field2: A,
}
{
_id:3,
field1: value,
field2: C,
}
{
_id:4,
field1: value,
field2: B,
}
我想要的是計算 A 發生、B 發生和 C 發生的次數并回傳計數。
我想要的輸出
{
A: 2,
B: 1,
C: 1,
}
uj5u.com熱心網友回復:
您可以$facet在這樣的聚合管道中使用:
$facet創建“三種方式”,在每種方式中按所需鍵(A、B 或 C)過濾值。- 然后在一個
$project階段你可以得到$size匹配的值。
db.collection.aggregate([
{
"$facet": {
"first": [
{
"$match": {
"field2": "A"
}
}
],
"second": [
{
"$match": {
"field2": "B"
}
}
],
"third": [
{
"$match": {
"field2": "C"
}
}
]
}
},
{
"$project": {
"A": {
"$size": "$first"
},
"B": {
"$size": "$second"
},
"C": {
"$size": "$third"
}
}
}
])
這里的例子
uj5u.com熱心網友回復:
利用$arrayToObject操作員和最終$replaceWith管道來獲得所需的結果。您需要運行以下聚合管道:
db.collection.aggregate([
{ $group: {
_id: { $toUpper: '$field2' },
count: { $sum: 1 }
} },
{ $group: {
_id: null,
counts: {
$push: { k: '$_id', v: '$count' }
}
} },
{ $replaceWith: { $arrayToObject: '$counts' } }
])
蒙戈游樂場
uj5u.com熱心網友回復:
$group這是聚合管道中階段的典型用例。你可以這樣做:
$group- 按field2對所有檔案進行分組$sum- 計算每個field2值的檔案數
db.collection.aggregate([
{
"$group": {
"_id": "$field2",
"count": {
"$sum": 1
}
}
}
])
作業示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457739.html
下一篇:生成弱X509證書
