如何通过查找获取另一个 collection 的信息
how to get information of another collection with lookup
我有 2 个 collection:电影和用户。在电影中,我保存了有关电影的信息,例如 明星 电影中的演员。我将这个字段保存为 Movie collection 中的数组。现在我想写一个 return 星名的查询。但此名称字段保存在用户 collection 中。如何从另一个 collection 中提取数据到这个 collection?我写了这个函数,但它是错误的,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)})
并且在 我写了我的数据库模型。
查看您的数据库模型,我认为您的电影架构定义中的引用字符串可能不正确。在你的电影模式中你有:
stars:[{
type: Schema.Types.ObjectId,
ref: 'userSchema'
}],
但您的用户模型定义为:
var User = mongoose.model('user', userSchema);
你的电影模式中的 ref
需要引用你给用户模型的名称,在这种情况下是 'user'
而不是 userSchema
我有 2 个 collection:电影和用户。在电影中,我保存了有关电影的信息,例如 明星 电影中的演员。我将这个字段保存为 Movie collection 中的数组。现在我想写一个 return 星名的查询。但此名称字段保存在用户 collection 中。如何从另一个 collection 中提取数据到这个 collection?我写了这个函数,但它是错误的,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)})
并且在
查看您的数据库模型,我认为您的电影架构定义中的引用字符串可能不正确。在你的电影模式中你有:
stars:[{
type: Schema.Types.ObjectId,
ref: 'userSchema'
}],
但您的用户模型定义为:
var User = mongoose.model('user', userSchema);
你的电影模式中的 ref
需要引用你给用户模型的名称,在这种情况下是 'user'
而不是 userSchema