Node.js 如何在nodejs中使用mongoose选择mongodb中的深层嵌套数据

Node.js 如何在nodejs中使用mongoose选择mongodb中的深层嵌套数据,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我是nodejs和mongoose的新手,我创建了一个categories文档,其中包含类别和子类别,子类别甚至包含子类别。现在我想从级别3中选择值,但我无法获得成功 下面是我的分类 [{ "_id": "58eb0ee37c1f817864b5b863", "name": "Electronics", "slug": "electronics", "order": 1, "__v": 0, "subCats": [{ "name": "Mobiles", "slug": "mo

我是nodejs和mongoose的新手,我创建了一个categories文档,其中包含类别和子类别,子类别甚至包含子类别。现在我想从级别3中选择值,但我无法获得成功

下面是我的分类

[{
"_id": "58eb0ee37c1f817864b5b863",
"name": "Electronics",
"slug": "electronics",
"order": 1,
"__v": 0,
"subCats": [{
    "name": "Mobiles",
    "slug": "mobiles",
    "_id": "58eb0ee37c1f817864b5b867",
    "subCats": [{
        "name": "Apple",
        "slug": "apple",
        "_id": "58eb0ee37c1f817864b5b872",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "HTC",
        "slug": "htc",
        "_id": "58eb0ee37c1f817864b5b871",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "Mi",
        "slug": "mi",
        "_id": "58eb0ee37c1f817864b5b870",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "OPPO",
        "slug": "oppo",
        "_id": "58eb0ee37c1f817864b5b86f",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "Samsung",
        "slug": "samsung",
        "_id": "58eb0ee37c1f817864b5b86e",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "Lenovo",
        "slug": "lenovo",
        "_id": "58eb0ee37c1f817864b5b86d",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "Motorola",
        "slug": "motorola",
        "_id": "58eb0ee37c1f817864b5b86c",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "LG",
        "slug": "lg",
        "_id": "58eb0ee37c1f817864b5b86b",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "Huawei",
        "slug": "huawei",
        "_id": "58eb0ee37c1f817864b5b86a",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "Nokia",
        "slug": "nokia",
        "_id": "58eb0ee37c1f817864b5b869",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }, {
        "name": "Microsoft",
        "slug": "microsoft",
        "_id": "58eb0ee37c1f817864b5b868",
        "params": ["RAM", "Storage", "Primary Camera", "Front Camera", "Battery", "Processor", "Display Size", "Resolution", "Resolution Type", "GPU", "Operating System"]
    }]
}, {
    "name": "Mobile Accessories",
    "slug": "mobile-accessories",
    "_id": "58eb0ee37c1f817864b5b864",
    "subCats": [{
        "name": "Mobile Cases",
        "slug": "mobile-cases",
        "_id": "58eb0ee37c1f817864b5b866",
        "params": ["Model", "type"]
    }, {
        "name": "Headphones & Headsets",
        "slug": "headphones-headsets",
        "_id": "58eb0ee37c1f817864b5b865",
        "params": []
    }]
}]
这里我想得到苹果分类的id和名称,下面是我获取数据的步骤

router.get('/getparms/:cat', function (req, res, next){

categoriesModel.find({
    "slug" : req.params.cat
} ,function(err, categories){
    if (err) throw err;

    res.send(categories);
})});

您可以使用聚合框架。你可以得到详细的信息和信息

这个代码可以正常工作

MyModel.aggregate([
{
“$match”:{
“子类别子类别段塞”:req.params.cat
}
},
{“$unwind”:“$SUBTACTS”},
{“$unwind”:“$subCats.subCats”},
{
“$match”:{
“子类别子类别段塞”:req.params.cat
}
},
{
“$project”:{
“数据”:“$subCats.subCats”
}
}
],函数(错误,结果){
控制台日志(结果);

})
您可以使用聚合框架。你可以得到详细的信息和信息

这个代码可以正常工作

MyModel.aggregate([
{
“$match”:{
“子类别子类别段塞”:req.params.cat
}
},
{“$unwind”:“$SUBTACTS”},
{“$unwind”:“$subCats.subCats”},
{
“$match”:{
“子类别子类别段塞”:req.params.cat
}
},
{
“$project”:{
“数据”:“$subCats.subCats”
}
}
],函数(错误,结果){
控制台日志(结果);

})
这将为他提供
subCats.subCats.slug中“Apple”中的所有文档,以及整个文档,OP想要的是获取
子类别
中唯一的
子类别
,其中
slug:apple
,这将为他提供
subCats.subCats.slug
中“apple”中的所有文档,以及整个文档,OP想要的是只获取
子类别的
子类别
,其中
slug:apple