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

使用MongoDB从单独集合中的文档聚合多个字段,mongodb,mongodb-query,aggregation-framework,non-relational-database,Mongodb,Mongodb Query,Aggregation Framework,Non Relational Database,我使用下面的代码来显示两个独立集合字段的结果:InfoMovie和Rate,它们之间的公共字段是MID。我想要一个结果集,使用Mongodb将集合“InfoMovie”中的“Actors”和集合“Rate”中的“remark”显示到一个resltset中。但当我执行下面的代码时,它只显示“备注”列表,但不显示备注的演员姓名。[注:本系列中的所有演员均未加注释。其中很少有人加注释。我们只需显示被注释演员的姓名。] 如果有人能解决这个问题,我将非常感激。先谢谢你!:) 以下是示例文档: 收集info

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

以下是示例文档: 收集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",
}     

你可以在下面试试

您需要使用聚合过滤掉
备注
等于未定义的文档

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

项目阶段应该是这样的$project:{“备注”:“$actorstrating”,“Actors”:1}但它也给出了未备注的电影的结果。我们怎么能不展示那些没有被评论的呢?无论如何,谢谢。好的,那么你能发布这两个系列的样本文档并提及你的mongodb版本吗?你好,先生!我已经添加了文件的代码。你能看一下吗!我们可以通过集合“rate”中的属性“remark”来识别。集合“Rate”由集合“InfoMovie”中的几个电影名称组成,备注栏包含对已备注和未备注电影的备注。是否可以将InfoMovie中的演员姓名和Rate中的备注显示为结果集?感谢您的回复。@Rocky,出于性能原因,最好升级到v3.6或更高版本,因为您可以利用“备注”字段上的索引,将
$match
阶段移动到
$lookup
管道中。@dnickless是的,但OP不在3.6上。是的,不用担心,这就是为什么我写道,如果他能升级就好了。然后我想你们应该对这个问题发表评论:)
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] }
      }
    }
  }}
])