Javascript 如何在节点js中为mongodb使用mongoose的填充方法?

Javascript 如何在节点js中为mongodb使用mongoose的填充方法?,javascript,node.js,mongodb,mongoose,mongodb-query,Javascript,Node.js,Mongodb,Mongoose,Mongodb Query,我试图从mongo数据库中读取数据,但出现错误。 我会解释我做了什么 创建两个模式 let CompanySchema = new Schema({ name: {type: String, required: true, max: 100}, contactPerson: {type: String}, }); // Export the model module.exports = mongoose.model('Company', CompanySchema); let

我试图从mongo数据库中读取数据,但出现错误。 我会解释我做了什么

  • 创建两个模式

    let CompanySchema = new Schema({
        name: {type: String, required: true, max: 100},
        contactPerson: {type: String},
    });
    
    
    // Export the model
    module.exports = mongoose.model('Company', CompanySchema);
    let UserSchema = new Schema({
        name: {type: String, required: true, max: 100},
        companyId:{ type: Schema.Types.ObjectId, ref: 'companyId' }
    });
    // Export the model
    module.exports = mongoose.model('UserTest', UserSchema);
    
  • 首先,添加一个这样的公司。该公司已成功添加

    app.get('/addCompany', async (req, res) => {
    let company = new Company({
        name: 'Test 1',
        contactPerson: 'rajesh'
    })
    company.save(function (err) {
        if (err) {
            console.log(err);
            res.status(500).send(err);
            // return next(err);
        }
        res.send('company added successfully')
        //res.render('index', { title: 'Express'}) 
        });
     })
    
  • 然后我添加了一个这样的用户。该用户已成功添加

    app.get('/addUser', async (req, res) => {
    let user = new User({
        name: 'Test 1',
        companyId: '5d3d46b2825d7f0eaf9d9d27'
    })
    user.save(function (err) {
        if (err) {
            console.log(err);
            res.status(500).send(err);
            // return next(err);
        }
        res.send('user added successfully')
        //res.render('index', { title: 'Express'}) 
       });
    })
    
  • 现在,我正在尝试获取所有具有
    公司详细信息的用户,并获取错误信息

    app.get('/getUser', async (req, res) => {
    
        User
            .find({})
            .populate('companyId') // only works if we pushed refs to person.eventsAttended
            .exec(function(err, data) {
                if (err) {
                 console.log(err)
                    return;
                }
                res.send(data);
            });
    
    
    })
    
    错误

    MissingSchemaError: Schema hasn't been registered for model "companyId".
    Use mongoose.model(name, schema)
        at new MissingSchemaError (/Users/b0207296/WebstormProjects/untitled2/node_modules/mongoose/lib/error/missingSchema.js:22:11)
        at NativeConnection.Connection.mode
    

    将第二个架构更改为以下内容后,是否可以立即尝试:

    let UserSchema = new Schema({
        name: {type: String, required: true, max: 100},
        companyId:{ type: Schema.Types.ObjectId, ref: 'Company' }
    });
    
    module.exports = mongoose.model('UserTest', UserSchema);
    

    假设
    companyId的
    在公司的_id中有匹配的文档。类似的功能也可以通过mongoDB的
    $lookup
    实现。

    在ref中,您应该传递公司而不是公司id

    let UserSchema = new Schema({
        name: {type: String, required: true, max: 100},
        companyId:{ type: Schema.Types.ObjectId, ref: 'Company' }
    });