2017-04-10 1 views
1

私はnodejsとmongooseを初めて使っています。カテゴリとサブカテゴリを持つカテゴリドキュメントを作成しました。今私はレベル3から値を選択したいと私は成功を得ることができません。ここでmongooseをnodejsで使用して深く入れ子になったデータを選択する方法

は私のカテゴリが

[{ 
"_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": [] 
    }] 
}] 

どのように見えるかをここで私は以下のAppleカテゴリの_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); 
})}); 

答えて

0

を取得するためにやっているものですです集約フレームワーク。詳細情報はherehereです。

このコードは正常に動作します。ここで

MyModel.aggregate([ 
 
    { 
 
     "$match": { 
 
      "subCats.subCats.slug": req.params.cat 
 
     } 
 
    }, 
 
    { "$unwind": "$subCats" }, 
 
    { "$unwind": "$subCats.subCats" }, 
 
    { 
 
     "$match": { 
 
      "subCats.subCats.slug": req.params.cat 
 
     } 
 
    }, 
 
    { 
 
     "$project": { 
 
      "data":"$subCats.subCats" 
 
     } 
 
    } 
 
], function (err, result) { 
 
    console.log(result); 
 
})

我々は$の試合で他のunnessary書類を減らすために最初の文書にマッチし、二回SUBCATSを巻き戻した後、我々は再びパラメータをマッチして、最後に我々は唯一中わたのSUBCATSドキュメントを返しました。

+0

これは、Appleが 'subCats.subCats.slug'で 'Apple'に書いているすべての文書と、あまりにも全体的な文書で、OPが望むのは'サブカテゴリ 'の 'サブカテゴリ'カテゴリ 'では'スラグ:リンゴ ' –

+0

@RaviShankarありがとう私は答えを更新しました。 – Tolsee

関連する問題