如何通过查找获取另一个集合的信息

时间:2018-11-10 13:06:53

标签: mongoose aggregation

我有2个收藏集:电影和用户。在电影中,我保存了有关电影的信息,例如在电影中播放的演员的明星。我将此字段另存为电影收藏中的数组。现在我想编写一个返回星号名称的查询。但是此名称字段保存在用户集合中。如何从另一个集合中提取数据到该集合?我编写了此函数,但是它是错误的,stars_doc为空。 这是我的功能:

async function starsActMostMovies(){
const res = await Movie.aggregate([
    {
        $unwind: '$stars'
    }
    ,
    {
        $lookup:
        {
            from: "User",
            localField: "_id",
            foreignField : "stars",
            as: "stars_doc"
        }
    }
    ,
    {
        $group: {
            _id : '$stars' ,
            count : { $sum : 1}
        }
    }
    ,
    {$sort: {count: -1}}
])
return res
}
starsActMostMovies().then(function(result){
    console.log(result)})

this link中,我编写了数据库模型。

1 个答案:

答案 0 :(得分:0)

查看数据库模型,我认为电影模式定义中的引用字符串可能不正确。在电影模式中,您具有:

stars:[{
type: Schema.Types.ObjectId,
ref: 'userSchema'
}],

但是您的用户模型定义为:

var User = mongoose.model('user', userSchema);

电影模式中的ref必须引用您为用户模型提供的名称,在这种情况下,该名称为'user'而不是userSchema