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