【问题标题】:Mongoose $lookup aggregate doesn't work as expectedMongoose $lookup 聚合没有按预期工作
【发布时间】: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)
                }
            });
        })
    },

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query mongoose-schema


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2018-11-16
    • 2022-01-04
    • 2020-03-15
    • 1970-01-01
    • 2017-01-16
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多