我目前正在做一個我的資料庫管理系統是 MongoDB 的專案。我正在撰寫一個聚合管道,其中有幾個階段。我目前正在某個特定階段苦苦掙扎,我想獲得以下輸出。MongoDB 有如此多的運算子運算式,我對使用哪一個來實作這一點感到困惑。我有一個名為 Styles 和 Sku 的集合,如下所示:
// Schema for styles
const styles = mongoose.Schema({
id: Number,
productId: Number,
name: String,
sale_price: String,
original_price: String,
default_price: Boolean,
}, {
strict: false,
});
// Schema for skus
const skus = mongoose.Schema({
id: Number,
styleId: Number,
size: String,
quantity: String,
}, {
strict: false,
});
每種樣式都可以有多個 SKU,一對多關系。在我的聚合管道中,我使用 $lookup 查找該特定樣式的所有 SKU,并在樣式檔案中添加一個名為 SKU 的新欄位。在 $lookup 之后我得到了這樣的結果。
{
"style_id": 1,
"name": "Forest Green & Black",
"original_price": "140",
"sale_price": "0",
"default?": true,
"skus": [
{
"id": 37,
"styleId": 1,
"size": "XS",
"quantity": 16
},
{
"id": 38,
"styleId": 1,
"size": "S",
"quantity": 8
}
]
}
這是預期的 $lookup 回傳匹配的陣列。但我希望我的樣式檔案看起來像這樣。
{
"style_id": 1,
"name": "Forest Green & Black",
"original_price": "140",
"sale_price": "0",
"default?": true,
"skus": {
"37": {
"styleId": 1,
"size": "XS",
"quantity": 16
},
"38": {
"styleId": 1,
"size": "S",
"quantity": 8
}
}
}
有人可以知道如何在聚合管道中構造上述資料嗎?任何幫助將不勝感激。提前致謝。
uj5u.com熱心網友回復:
您可以使用$map或$reduce將陣列中的物件轉換為表單
[
{
k: <key1>
v: <value1>
},
{
k: <key2>
v: <value2>
}
]
然后使用$arrayToObjectwhich 將陣列轉換為一個物件,如:
{
<key1>: <value1>,
<key2>: <value2>
}
總之,這可能看起來像:
{$addFields: {
skus: {
$arrayToObject: {
$map: {
input: "$skus",
in: {
k: {$toString: "$$this.id"},
v: "$$this"
}
}
}
}
}}
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332649.html
上一篇:如何搜索具有多個屬性的貓鼬資料?
