2017-10-14 54 views
0

我是nodejs的新手,目前我正在使用nodejs,express和mongoose開發Web 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

您可以使用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 
     } 
    } 
]) 
相關問題