2017-10-14 9 views
0

저는 nodejs에 익숙하지 않고 현재 nodejs, express 및 mongoose를 사용하여 웹 API를 개발 중입니다. 누구든지 몽구스 쿼리를 따르는 데 나를 도울 수 있습니까?Nodejs 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" 
         } 
        ], 
} 

이다 그러나 나는 실행할 이것을 출력으로 줄 수있는 단일 몽구스 쿼리

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

답변

0
당신은

확인

는 동적 데이터 sample_id["1" , "2"]을 대체하는 것을 잊지 않는다는 것을 달성하기 위해 MongoDB의 골재를 사용할 수 있습니다

아래 코드 :

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 
     } 
    } 
])