使用 MongoDB 从单独集合中的文档聚合多个字段

aggregating multiple fields from documents in separate collections using MongoDB

我使用下面的代码来显示单独集合的两个字段的结果:InfoMovie 和 Rate,将 MID 作为它们之间的公共字段。我想要一个使用 Mongodb 将集合 "InfoMovie" 中的 "Actors" 和集合 "Rate" 中的 "remark" 显示到一个结果集中的结果集。但是当我执行下面的代码时,它只显示 "remark" 的列表但不显示评论的演员姓名。 [注意:集合中的所有演员都不是 remarked.Few 他们都是备注。我们必须只显示评论演员的名字。] 如果有人能解决这个问题,我将不胜感激。先感谢您! :)

db.InfoMovie.aggregate([
 {
    $lookup: 
    { 
        from:"Rate",
        localField:"MID", 
        foreignField:"MID", 
        as:"ActorsRating"
    }
},
    {
        $project:{"Remark":1,"Actors":1}
    }
])

以下是示例文档: 集合 infoMovie 的示例文档:

{
    "MID":"1",
    "MovieName":"Iron man",
    "Actors":"RDJ",
    "RDate":"2008",
    "Country":"USA",
}, 

{
    "MovieID":"2",
    "MovieName":"Dark Knight",
    "Actors":"Christian Bail",
    "RDate":"2007",
    "Country":"USA",
}

我使用的mongod版本是3.4.7。谢谢!

收集率样本文件:

{
    "MID":1,
    "ReviewedBy":"John",
    "Rate":4,
    "Date":"10/04/2013",
    "remark":"The best Movie ever!",
},
{
    "MID":2,
    "ReviewedBy":"William",
    "Rate":8,
    "Date":"19/06/2014",
}     

您可以尝试以下聚合

需要使用$filter聚合来过滤掉Remark等于undefined的文档。

db.InfoMovie.aggregate([
  { "$lookup": { 
    "from":"Rate",
    "localField":"MID", 
    "foreignField":"MID", 
    "as":"ActorsRating"
  }},
  { "$project": {
    "Actors": 1,
    "Remark": {
      "$filter": {
        "input": "$ActorsRating",
        "as": "ac",
        "cond": { "$ne": ["$$ac.remark", undefined] }
      }
    }
  }}
])