森林海
如果不需要使用操作系统和品牌名称作为键,我有这样的解决方案。我会像这样设置我的模式:const mongoose = require("mongoose");const operatingSystemSchema = new mongoose.Schema({ name: { type: String, required: true }});const brandSchema = new mongoose.Schema({ name: { type: String, required: true }});const productSchema = new mongoose.Schema({ model: { type: String, required: true }, operatingSystem: { type: mongoose.Schema.Types.ObjectId, ref: "OperatingSystem" }, brand: { type: mongoose.Schema.Types.ObjectId, ref: "Brand" }});module.exports = { OperatingSystem: mongoose.model("OperatingSystem", operatingSystemSchema), Brand: mongoose.model("Brand", brandSchema), Product: mongoose.model("Product", productSchema)};根据模式插入文档后,我们可以使用以下聚合按操作系统和品牌进行分组:db.products.aggregate([ { $lookup: { from: "operatingsystems", localField: "operatingSystem", foreignField: "_id", as: "operatingSystems" } }, { $lookup: { from: "brands", localField: "brand", foreignField: "_id", as: "brands" } }, { $unwind: "$operatingSystems" }, { $unwind: "$brands" }, { $replaceRoot: { newRoot: { $mergeObjects: [ "$$ROOT", { operatingSystem: "$operatingSystems.name", brand: "$brands.name" } ] } } }, { $project: { brands: 0, operatingSystems: 0 } }, { $group: { _id: { "operatingSystem": "$operatingSystem", "brand": "$brand", }, products: { $push: "$$ROOT" } } }, { $group: { "_id": "$_id.operatingSystem", "data": { "$push": { "brand": "$_id.brand", "models": "$products.model" } } } }, { $project: { "OS": "$_id", "_id": 0, "data": 1 } }])操场以及快递方面的示例路线:router.get("/", async (req, res) => { const result = await Product.aggregate([ { $lookup: { from: "operatingsystems", localField: "operatingSystem", foreignField: "_id", as: "operatingSystems" } }, { $lookup: { from: "brands", localField: "brand", foreignField: "_id", as: "brands" } }, { $unwind: "$operatingSystems" }, { $unwind: "$brands" }, { $replaceRoot: { newRoot: { $mergeObjects: [ "$$ROOT", { operatingSystem: "$operatingSystems.name", brand: "$brands.name" } ] } } }, { $project: { brands: 0, operatingSystems: 0 } }, { $group: { _id: { operatingSystem: "$operatingSystem", brand: "$brand" }, products: { $push: "$$ROOT" } } }, { $group: { _id: "$_id.operatingSystem", data: { $push: { brand: "$_id.brand", models: "$products.model" } } } }, { $project: { OS: "$_id", _id: 0, data: 1 } } ]); res.send(result);});结果将如下所示:[ { "OS": "Windows", "data": [ { "brand": "Nokia", "models": [ "Nokia 7.2" ] } ] }, { "OS": "Android", "data": [ { "brand": "OnePlus", "models": [ "oneplus7", "oneplu6" ] }, { "brand": "Samsung", "models": [ "S7", "S6" ] } ] }, { "OS": "IOS", "data": [ { "brand": "Apple", "models": [ "Iphone7", "Iphone6" ] } ] }]