2017-08-11 13 views
2

オブジェクト構造を持たないプロパティ値の配列を取得する方法を教えてください。ここに私のスキーマNodejs Mongooseプロパティ値の結果配列を取得

_id: { 
    type: Schema.Types.ObjectId, 
    ref: "User" 
}, 

services: [{ 
      _id:false, 
      service_category: { 

         type: Schema.Types.ObjectId, 
         ref: "ServiceCategory" 
       }, 
      sub_services :[{ 
      _id:false, 
      service : { 
         type: Schema.Types.ObjectId, 
         ref: "Service" 
        } 
      }]    
}] 

であり、これは私が結果

Vendor.find({ '_id': req.user._id, 'services.service_category':req.body.category_id},'services.sub_services.service').exec(function (err, rtnobj) { 
    if (err) { 
     console.log(err); 
     return (err); 
    } 
    else{ 
     res.send(rtnobj); 
    } 
    }) 

を照会するつもりだった方法です。しかし、それは私に、この出力

[ 
    { 
     "_id": "598b28271a0b551af8fbf849", 
     "services": [ 
      { 
       "sub_services": [ 
        { 
         "service": "service 1 _id" 
        }, 
        { 
         "service": "service 2 _id" 
        } 
       ] 
      } 
     ] 
    } 
] 

を与えるしかし、私は次の形式で結果を必要とします

[ "service 1 _id", "service 2 _id",......] 

これを行うための標準的なアプローチはありますか?または任意の代替方法

おかげ

+0

[Mongoose、Findで特定のフィールドを選択する](https://stackoverflow.com/questions/24348437/mongoose-select-a-specific-field-with-find)の可能な複製 –

+0

いいえ、それは似ていませんこの質問でありがとう –

答えて

1

クエリを使用する場合は、あなたにもちょうどあなたが今して結果の上にマッピングするために何をすべきかやり続けるかもしれません:

Vendor.find({ '_id': req.user._id, 'services.service_category':req.body.category_id},'services.sub_services.service').exec(function (err, rtnobj) { 
    res.send(rtnobj.services.sub_services.map(each => each.service)) 
}) 

あなたができました同様のことを行うために集約フレームワークを使用してください。しかし、私は上記が最も慣用的であると思う。

+0

それは動作しますが、いくつかの変更をres.send(rtnobj [0] .services [0] .sub_services.map(each => each.service))する必要がありました。ご協力ありがとうございました –

関連する問題