![](/img/trans.png)
[英]How to use populate method of mongoose for mongodb in node js?
[英]populate method in mongoose (node js)
我正在嘗試在節點 js 中使用 populate()。 好吧,我正在嘗試將一個集合的 objectId 訪問到另一個集合中。 例如,我有一個名為 Project 和 events 的集合,在那里我有這樣的架構。
項目架構:
const projectSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
projectName: {
type: String,
required: true,
unique: true
},
dimensions: {
type: [],
required: false
},
events: {
[type: mongoose.Schema.Types.ObjectId],
ref: 'EnrichedEvent'
},
});
module.exports = mongoose.model('Project', projectSchema);
事件架構:
const enrichedEventSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
projectId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Project',
required: true
},
name: {
type: String,
required: true
},
type: {
type: String,
enum: ["Enriched"],
required: true
},
source: {
type: String,
required: true
},
});
以及項目的路由代碼:
const express = require("express");
const router = express.Router();
const mongoose = require("mongoose");
const Project = require("../models/project");
router.get("/", (req, res, next) => {
Project.find()
.populate('source', 'EnrichedEvents') //When i use this populate method, I m not able to GET any events on to browser..
.exec()
.then(docs => {
const response = {
count: docs.length,
projects: docs.map(doc => {
return {
projectName: doc.projectName,
dimensions: doc.dimensions,
events: doc.events,
_id: doc._id
};
})
};
res.status(200).json(response);
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
router.post("/", (req, res, next) => {
const project = new Project({
_id: new mongoose.Types.ObjectId(),
projectName: req.body.projectName,
events: req.body.events
});
project
.save()
.then(result => {
console.log(result);
res.status(201).json({
message: "Created project successfully",
createdProject: {
projectName: result.projectName,
_id: result._id,
events: result.events,
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
});
module.exports = router;
我的問題是我無法在項目頁面中自動填充豐富的eventsId
。 例如。 每當我更新事件時,它們應該出現在項目頁面中。但它不會發生。 在事件頁面中,我也沒有得到相應的 projectId。 請指出我正確的方向。
填充方法采用FIELD_TO_POPULATE
和FIELDS_TO_RETURN_FROM_POPULATED_DOC
並且您以相反的方式傳遞它。 同樣在項目模式中,您已經為EnrichedEvent
使用了events
,因此在填充時使用的events
不是EnrichedEvent
。
請嘗試以下操作:
從:
.populate('source', 'EnrichedEvents')
至:
.populate('events', 'EnrichedEvent')
編輯:
更新EnrichedEvent
的架構:
events: [{
mongoose.Schema.Types.ObjectId,
ref: 'EnrichedEvent'
}]
現在應該可以工作了。
我嘗試使用類似的.populate('...', '...')
方法但沒有成功。 我會用
.populate('source').populate('EnrichedEvent')
或('EnrichedEvents')
取決於您在架構中定義的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.