Nodejs Mongoose选择整个文档,但只选择属性数组中的选定项

时间:2017-10-14 13:56:34

标签: arrays node.js mongoose mongodb-query mongoose-schema

我是nodejs的新手,目前我正在使用nodejs,express和mongoose开发Web API。任何人都可以帮我跟进mongoose查询。

var EventSchema = new Schema({

      event_title: {
            type: String,
            required: true
      },

      service_order: [{
                  _id:{
                    type: String
                  },
                  service : {
                        type: Schema.Types.ObjectId,
                        ref: "Service"
                  }

      }]    
});

我想选择整个事件文档,但只选择该数组中选定的service_order项

前: - 这是一个完整的活动文件

{
   _id: "sample_id",
   name: 'some name',
   "service_order": [
                        {
                         "_id": "1"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f15"
                        },
                        {
                         "_id": "2"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f18"
                        },
                        {
                         "_id": "3"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f18"
                        },
                        {
                         "_id": "4"
                         "service": {
                                    "_id": "59c005524d9c141fe0d95f18"
                        }
                    ],
}

但我想执行一个mongoose查询,可以将其作为输出

{
       _id: "sample_id",
       name: 'some name',
       "service_order": [
                            {
                             "_id": "1"
                             "service": {
                                        "_id": "59c005524d9c141fe0d95f15"
                            },
                            {
                             "_id": "2"
                             "service": {
                                        "_id": "59c005524d9c141fe0d95f18"
                            }
                        ],
    }

最初我知道事件ID(" sample_id")和我想要选择的service_orders的ID([" 1"," 2"])

1 个答案:

答案 0 :(得分:0)

您可以使用mongodb聚合来实现

不要忘记用动态数据替换sample_id["1" , "2"]

检查以下代码:

db.event.aggregate([
    {
        $match: { _id: "sample_id" } 
    },
    {
        $unwind: { path: "$service_order" }
    },
    {
        $match : { 'service_order._id' : { $in : [ "1" , "2"]} } 
    },
    {
        $group : { 
            _id: { _id: "$_id", "name": "$name"},
            service_order: { $addToSet: "$service_order" },
        }
    },
    {
        $project : {
            _id : "$_id._id",
            name : "$_id.name",
            service_order : 1
        }
    }
])