我有一個MongoDB模式,看起來像這樣的
const ProductModel = new Schema({
subcategory: {
type : mongoose.Schema.Types.ObjectId。
ref : "Subcategory",
},
product_name: {
type: String。
},
description: {
type: String: type: 鈾?
},
price: {
type: 數字。
},
});
還有一個子類別模式:
const SubcategoryModel = new Schema( {
subcategoryName: {
type: String,
}
});
聚合之前的輸入查詢看起來是這樣的:
[
{
"_id"。"111",
"subcategory": {
"_id": "456",
"categoryName": "Sneakers",
},
"product_name": "現代運動鞋"。
"description": "時尚的"。
"價格": 4400。
},
{
"_id": "222",
"subcategory": {
"_id": "456",
"categoryName": "Sneakers",
},
"product_name": "藍色鞋子"。
"description": "Vived colors",
"價格": 7500。
},
{
"_id": "333",
"subcategory": {
"_id": "123",
"categoryName": "夾克衫",
"__v": 0。
},
"product_name": "現代夾克"。
"description": "時尚的"。
"價格": 4400。
},
}
查詢的最終結果應該是這樣的:
{
"Sneakers"/span>:[
{
"product_name":"現代運動鞋"。
"description":"Stylish",
"價格":"4400"。
},
{
"product_name":"Blue shoes"。
"description":"Vived colors",
"價格":"7500"。
},
"夾克衫":{
"...."
}
]
聚合前的子類別:
"subcategories"/span>: [
{
"_id": "123",
"categoryName": "夾克衫"。
},
{
"_id": "456",
"categoryName": "Sneakers",
}
我正在嘗試填充子類別,然后通過子類別名稱欄位對產品進行分組。
uj5u.com熱心網友回復:
你可以使用這個聚合查詢:
你可以使用這個聚合查詢。
- 首先
$lookup在Product和Subcategory之間做連接,創建陣列subcategories。 - 然后使用
$unwind對陣列進行解構。 。
$group通過子產品的名稱添加整個物件,使用$ROOT. 。
- 使用
$project傳遞你想要的欄位。 - 和
replaceRoot來獲得鍵值到陣列中作為Sneakers和Jackets. 。
db.Product.aggregate( [
{
"$lookup"/span>: {
"from": "subcategory",
"localField": "subcategory.categoryName",
"foreignField": "categoryName",
"as": "subcategories", "as".
}
},
{
"$unwind": "$subcategories": "$subcategories".
},
{
"$group": {
"_id": "$subcategories.categoryName",
"data": {
"$push": "$ROOT"。
}
}
},
{
"$project": {
"data": {
"product_name": 1,
"description": 1,
"價格": 1, "price".
}
}
},
{
"$replaceRoot"/span>: {
"newRoot"/span>: {
"$arrayToObject": [
[
{
"k": "$_id",
"v": "$data".
}
]
]
}
}
}
])
示例 這里
使用你提供的資料,結果是:
[
{
"Sneakers"/span>: [
{
"description": "Stylish",
"價格": 4400,
"product_name": "現代運動鞋"。
},
{
"description": "Vived colors",
"價格": 7500,
"product_name": "Blue shoes": "Blue shoes".
}
]
},
{
"夾克衫": [
{
"description": "Stylish",
"價格": 4400,
"product_name": "Modern jacket".
}
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/319838.html
標籤:
下一篇:顯示按鈕被點擊的順序
