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 聚合不按输入日期过滤

Mongoose 聚合查找 - 如何按特定 id 过滤

Mongoose,使用 $lookup 的聚合查询返回 null?

来自多个集合的 $lookup 的 Mongoose 聚合返回空集

Mongoose:$lookup 后的 $project 不显示字段

MongoDB 聚合 - $lookup 性能