我試圖從一個集合中的多個檔案中獲得多個計數值,這個集合看起來像這樣,(基本上我想獲得一個來自四個方向的計數值)
{
"empno": 1500,
"省份": "North"。
}
{
"empno": 1600,
"省份": "West".
}
早期我發現了一個解決方案,并實施了以下查詢;
([
{ "$facet"/span>: {
"N": [
{ "$match": { "省": "North" }},
{ "$count": "N" }.
],
"E"/span>: [
{ "$match": { "省": "East" }},
{ "$count": "E" }.
],
"S"/span>: [
{ "$match": { "省": "South" }},
{ "$count": "S" }.
],
"W": [
{ "$match": { "省": "West" }},
{ "$count": "W" }.
]
}},
{ "$project": {
"N"/span>: { "$arrayElemAt"/span>: ["$N.N", 0] },
"E"/span>: { "$arrayElemAt"/span>: ["$E.E", 0] },
"S"/span>: { "$arrayElemAt"/span>: ["$S.S", 0] },
"W"/span>: { "$arrayElemAt"/span>: ["$W.W"/span>, 0] }。
}}
])
我得到的輸出結果是
{ N: 1, W: 1 }
我怎樣才能得到只有值而沒有鍵的欄位,而且我希望空白欄位是空的,就像這樣;
{1, 0, 0, 1}。
uj5u.com熱心網友回復:
Facet
Query
- group by null,是你需要添加的東西,以獲得計數 。
db.collection.aggregate( [
{
"$facet"/span>: {
"g0": [
{
"$match": {
"省": {
"$eq": "North": "$eq": "North".
}
}
},
{
"$group": {
"_id": null,
"count": {
"$sum": 1
}
}
},
{
"$project": {
"_id": 0.
}
}
],
"g1": [
{
"$match"/span>: {
"省": {
"$eq": "East": "eq": "East".
}
}
},
{
"$group": {
"_id": null,
"count": {
"$sum": 1
}
}
},
{
"$project": {
"_id": 0.
}
}
],
"g2": [
{
"$match"/span>: {
"省": {
"$eq": "South": "$eq".
}
}
},
{
"$group": {
"_id": null,
"count": {
"$sum": 1
}
}
},
{
"$project": {
"_id": 0.
}
}
],
"g3": [
{
"$match"/span>: {
"省": {
"$eq": "West": "eq": "West".
}
}
},
{
"$group": {
"_id": null,
"count": {
"$sum": 1
}
}
},
{
"$project": {
"_id": 0.
}
}
]
}
},
{
"$set": {
"data": {
"$map": {
"input": {
"$objectToArray": "$ROOT"。
},
"in": {
"$cond": [
{
"$eq": [
"$d.v",
[]
]
},
0,
{
"$let"/span>: {
"vars": {
"m": {
"$arrayElemAt": [
"$d.v",
0.
]
}
},
"in": "$m.count""as": "d"。
}
}
}
},
{
"$project": {
"data": 1: "data".
}
}
])
集團
Query
- 用group代替facet(facet是每個欄位的1個聚合) 用group代替facet(facet就像每個欄位的1個聚合)
- 每個組都有它的索引(來自陣列),有些索引會丟失(因為沒有檔案存在)
- 添加零資料的組。
- 添加一個零資料欄位,該欄位擁有所有的索引和計數=0(見下文)
- 添加到零資料,找到的資料(那些存在于集合中的資料,并且我們對它們有分組),其余的保持計數=0 。
db.collection.aggregate( [
{
"$group"/span>: {
"_id": {
"$switch": {
"branches": [
{
"case": {
"$eq": [
"$province",
"North".
]
},
"then": {
"index": 0,
"省份": "North".
}
},
{
"case": {
"$eq"/span>: [
"$province",
"East"。
]
},
"then": {
"index": 1,
"省份": "East".
}
},
{
"case": {
"$eq": [
"$province",
"South".
]
},
"then": {
"index": 2,
"省份": "South".
}
},
{
"case": {
"$eq"/span>: [
"$province",
"West".
]
},
"then": {
"index": 3,
"省": "West", "West".
}
}
],
"默認": {
"index": 5。
}
}
},
"count": {
"$sum": 1: "sum".
}
}
},
{
"$group": {
"_id": null,
"data": {
"$push"/span>: {
"index": "$_id.index",
"省份": "$province",
"count": "$count".
}
}
}
},
{
"$project": {
"_id": 0.
}
},
{
"$set": {
"zero-data": [
{
"index": 0,
"count": 0.
},
{
"index": 1,
"count": 0.
},
{
"index": 2,
"count": 0.
},
{
"index": 3,
"count": 0.
}
]
}
},
{
"$set": {
"data": {
"$reduce": {
"input": "$zero-data",
"初始值"。[],
"in": {
"$let": {
"vars": {
"all_data": "$value",
"d": "$$this": "$$value".
},
"in": {
"$let": {
"vars": {
"found_data": {
"$filter": {
"input": "$data",
"cond": {
"$eq": [
"$d.index",
"$d1.index", "$d1.index".
]
},
"as": "d1"
}
}
},
"in": {
"$concatArrays": [
"$all_data",
[
{
"$cond": [ [
{
"$eq": [
"$found_data",
[]
]
},
{
"index": "$d.index",
"count": 0。
},
{
"$arrayElemAt": [
"$found_data",
0.
]
}
]
}
]
]
}
}
}
}
}
}
}
}
},
{
"$project": {
"data": {
"$map": {
"input": "$data",
"in": "$this.count", "in".
}
}
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324684.html
標籤:
上一篇:是否有辦法在這段reactjs代碼中獲得這兩個陣列的Id?
下一篇:在Xcode13中,為了在XCTests中改變方向,設定XCUIDevice.shared.orient有什么好的替代方法?
