[英]How to use populate method of mongoose for mongodb in node js?
我正在嘗試從 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'}) }); })
現在我正在嘗試使用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.