簡體   English   中英

如何在節點js中為mongodb使用mongoose的populate方法?

[英]How to use populate method of mongoose for mongodb in node js?

我正在嘗試從 mongo 數據庫讀取數據,但出現錯誤。 我會解釋我做了什么。

  1. 創建兩個模式

    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);
  2. 首先,像這樣添加一個公司,添加成功

    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'}) }); })

在此處輸入圖片說明

  1. 然后我添加了一個這樣的用戶。這是成功添加的。

     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'}) }); })

在此處輸入圖片說明

現在我正在嘗試使用company detail獲取所有用戶並獲取錯誤

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's在 Company 的 _id 中有匹配的文檔。 類似的功能也可以通過 mongoDB 的$lookup來實現。

在 ref 中,您應該通過 Company 而不是 company id

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM