2017-10-14 4 views
0

私はnodejsを初めて使いました。現在、nodejs、express、mongooseを使ってWeb APIを開発しています。 mongooseの質問に従う人は誰でも助けてくれますか?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 
     } 
    } 
]) 
関連する問題