Nodejs Mongoose 获取属性值的结果数组

Posted

技术标签:

【中文标题】Nodejs Mongoose 获取属性值的结果数组【英文标题】:Nodejs Mongoose get result array of property values 【发布时间】:2018-01-19 20:38:19 【问题描述】:

如何在没有对象结构的情况下获得一组属性值。这是我的架构

  _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",......]

是否有任何标准方法可以做到这一点。或任何替代方法

谢谢

【问题讨论】:

Mongoose, Select a specific field with find的可能重复 不,这与这个问题不相似。谢谢 【参考方案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))
)

您也可以使用聚合框架来做类似的事情。但我认为以上是最惯用的。

【讨论】:

它工作,但必须做一些改变 res.send(rtnobj[0].services[0].sub_services.map(each => each.service));感谢您的支持

以上是关于Nodejs Mongoose 获取属性值的结果数组的主要内容,如果未能解决你的问题,请参考以下文章

是否有可能在Mongoose查询结果中获取虚拟属性?

Nodejs mongoose根据对象属性选择嵌套数组中的对象

具有特定值的 Mongoose 模式属性

如何在 MongoDB 中对聚合查询结果进行分页并获得总文档数(Node.js + Mongoose)?

Mongoose 是不是提供对 pre('save') 中属性先前值的访问?

nodejs+express+mongoose无法获取数据库数据问题解决