Mongoose $lookup 聚合没有按预期工作
Posted
技术标签:
【中文标题】Mongoose $lookup 聚合没有按预期工作【英文标题】:Mongoose $lookup aggregate doesn't work as expected 【发布时间】:2020-05-31 09:39:43 【问题描述】:我正在编写这个平均堆栈应用程序,在这里我有该公司的公司架构和车辆架构。
公司详情架构
var CompanyDetailsSchema = new Schema(
companyName: String,
createdAt: type: Date, default: Date.now ,
...............
...............
);
module.exports = mongoose.model('Company-details', CompanyDetailsSchema);
车辆架构
var VehicleDetailsSchema = new Schema(
companyId:
type:mongoose.Schema.ObjectId,
ref: 'Company-details'
,
createdAt: type: Date, default: Date.now ,
....................
....................
);
module.exports = mongoose.model('Vehicle-details', VehicleDetailsSchema);
我需要的是在获取车辆详细信息时也获取所有公司详细信息。就像在 SQL 连接查询中一样,我正在使用这个 $lookup
聚合。此代码示例返回所有车辆,但公司详细信息为空。如何在猫鼬中获取所有公司详细信息。
getVehciles:() =>
return new Promise((resolve, reject) =>
VehicleDetailsSchema.aggregate([
$lookup:
from: "Company-details", // collection name in db
localField: "companyId",
foreignField: "_id",
as: "companyDetails"
]).exec(function(err, vehicles)
if(err)
reject(err)
else
resolve(vehicles)
);
)
,
【问题讨论】:
【参考方案1】:试试这个代码对我有用。
getVehciles:() =>
return new Promise((resolve, reject) =>
VehicleDetailsSchema.aggregate([
$lookup:
from: "company-details", // pass the callection name in small letters
localField: "companyId",
foreignField: "_id",
as: "companyDetails"
]).exec(function(err, vehicles)
if(err)
reject(err)
else
resolve(vehicles)
);
)
,
【讨论】:
这和我的代码有什么区别。你能解释一下你改变了什么吗? 这样传递集合名称小写字母company-details
以上是关于Mongoose $lookup 聚合没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose,使用 $lookup 的聚合查询返回 null?
来自多个集合的 $lookup 的 Mongoose 聚合返回空集