2017-08-11 46 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,選擇一個特定字段與查找](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));感謝您的支持 –