1

樣品文件從集合填充在蒙戈

{ 
    _id:"123", 
    "completed" : [ 
     { 
      "Id" : ObjectId("57caae00b2c40dd21ba089be") 
      "subName" : "oiyt", 
      "Name" : "Endo", 

     }, 
     { 
      "Id" : ObjectId("57caae00b2c40dd21ba089be"), 
      "subName" : "oiyt", 
      "Name" : "Endo", 
     } 
    ] 
} 

如何訪問從completename和​​哪裏_id比賽嗎?

+0

通過貓鼬訪問?您是否定義了貓鼬模式?在定義模式模型之後,它應該是單一的調用。諸如: 'MyModel.find({「_ id」:「57caae00b2c40dd21ba089be」}).exec(function(err,docs){012rif(!err)console.log(docs [0] .completed.Name ); console.log(docs [0] .completed.subName); } });' – hooSein

+0

雖然找到我需要獲取唯一的名稱和子名稱不是整個文檔 – Suresh

回答

0

您可以使用$filter$unwind(或兩者)。

此示例說明如何使用$filter僅使用數組中的一個匹配元素獲取文檔,然後使用$unwind來更容易地訪問匹配元素。

但還有很多選項可以獲得所需的結果。

db.collection.aggregate([ 
    { 
     $project: { 
      filtered_completed: { 
       $filter:{ 
        input: "$completed", 
        as: "complete", 
        cond: { 
         $eq: [input_id, "$$complete.Id"] 
        } 
       } 
      } 
     } 
    }, 
    { 
     $unwind: "$filtered_completed" 
     // because we already filtered the 'completed' array, we will get only one document. 
     // but you can use it as the first aggreagation pipeline stage and match the _id 
    }, 
    { 
     $project: { 
      "filtered_completed.Name": 1, 
      "filtered_completed.subName": 1 
     } 
    } 
]) 

閱讀更多關於$filter$unwind

+0

是的,它符合我的要求..但我們可以在cond中使用$作爲多個ID的 – Suresh

+0

是的,正如我寫的,這只是許多選項中的一個例子。 – TomG