【问题标题】:Nodejs Mongoose get result array of property valuesNodejs Mongoose 获取属性值的结果数组
【发布时间】: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",......]

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

谢谢

【问题讨论】:

标签: node.js mongodb mongoose mongoose-schema


【解决方案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));感谢您的支持
猜你喜欢
  • 2018-08-02
  • 2014-05-12
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 2019-01-09
相关资源
最近更新 更多