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

时间:2018-09-19 01:12:27

标签: mongodb mongodb-query aggregation-framework non-relational-database

我使用下面的代码来显示两个单独集合的字段的结果:InfoMovie和Rate,将MID作为它们之间的公共字段。我想要一个结果集,该结果集使用Mongodb将集合“ InfoMovie”中的“演员”和集合“ Rate”中的“备注”显示为一个resltset。但是,当我执行以下代码时,它仅显示“备注”列表,但不显示备注的演员名称。 [注意:集合中的所有演员均未评论,其中很少有评论。我们只需要显示被评论的演员的名字。] 如果有人能解决这个问题,我将非常感激。先感谢您! :)

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",
}     

1 个答案:

答案 0 :(得分:1)

您可以尝试以下汇总

您需要使用$filter聚合来过滤Remark等于未定义的文档。

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] }
      }
    }
  }}
])