我使用下面的代码来显示两个单独集合的字段的结果: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",
}
答案 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] }
}
}
}}
])