我在 mongodb 中有樹記錄,但可能還有更多,我通過來自前端的 ID 獲取商店
我需要獲取 20 條記錄并按 itemId 和 colorId 對它們進行分組,并獲取每個商店的計數。商店的數量可以是 1,2,3,....10 等等..
這是我需要的輸出:
-------- ---------- ------- ------- -------
| itemId | colorId | shop1 | shop2 | shop3 |
======== ========== ======= ======= =======
| 1 | colorId1 | 5 | 0 | 3 |
-------- ---------- ------- ------- -------
| 2 | colorId2 | 3 | 0 | 0 |
-------- ---------- ------- ------- -------
| 3 | colorId2 | 0 | 3 | 0 |
-------- ---------- ------- ------- -------
| 2 | colorId1 | 0 | 5 | 0 |
-------- ---------- ------- ------- -------
| 3 | colorId1 | 0 | 0 | 5 |
-------- ---------- ------- ------- -------
這是我的資料和查詢- 這里 shopId 是字串,它作業得很好。
但是當我在本地機器上使用這個查詢時,我收到了這個錯誤:
MongoError: PlanExecutor error during aggregation :: $arrayToObject 需要一個帶有鍵'k'和'v'的物件,其中'k'的值必須是字串型別。找到型別:objectId
但是當我將 shopId 更改為 ObjectId 時,我遇到了錯誤。 物件 ID 版本
uj5u.com熱心網友回復:
根據您在評論中的要求(如果我沒記錯的話):
db.collection.aggregate([
{
"$match": {}// <-- Highly recommend you to use match due to the complexity of this query
},
{
$group: {
_id: 0,
data: {
$push: {
shopId: "$shopId",
shopItems: "$shopItems"
}
},
shopIds: {
"$push": {
shopId: "$shopId",
"count": 0
}
}
}
},
{
$unwind: "$data"
},
{
$unwind: "$data.shopItems"
},
{
$group: {
_id: {
itemId: "$data.shopItems.itemId",
colorId: "$data.shopItems.colorId"
},
data: {
$push: {
shopId: "$data.shopId",
count: "$data.shopItems.itemCount"
}
},
existing: {
$push: {
shopId: "$data.shopId",
"count": 0
}
},
shopIds: {
$first: "$shopIds"
}
}
},
{
"$addFields": {
"missing": {
"$setDifference": [
"$shopIds",
"$existing"
]
}
}
},
{
$project: {
data: {
$concatArrays: [
"$data",
"$missing"
]
}
}
},
{
$unwind: "$data"
},
{
$sort: {
"data.shopId": 1
}
},
{
$group: {
_id: "$_id",
counts: { // here you can change this key
$push: "$data"
},
totalCount: {
$sum: "$data.count" // if you want it
}
}
}
])
在第一個之后$match,我們$group為了獲取每個檔案中的所有 shopId。接下來我們$unwind和$group您想要的組:通過 colorId 和 itemId。然后我們添加所有計數為 0 的商店并洗掉那些確實有實際計數的商店。最后三個步驟僅用于排序、求和和格式化。你可以在這里玩。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/450010.html
上一篇:從貓鼬中檢索物件屬性后無法訪問它
下一篇:路由器沒有得到資料庫函式的回應
