在猫鼬(Node js)中填充方法



我正在尝试在节点js中使用populate( (。 好吧,我正在尝试访问一个集合的objectId到另一个集合中。 例如,我有一个名为项目和事件的集合, 我有这样的模式。

项目架构:

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。 例如。每当我更新事件时,它们应该出现在项目页面中,但它没有发生。在事件页面中,我也没有获得相应的项目ID。请指出我正确的方向。

填充方法需要FIELD_TO_POPULATEFIELDS_TO_RETURN_FROM_POPULATED_DOC,并且您以相反的方式传递它。同样在您的项目架构中,您已将events用于EnrichedEvent,因此在填充使用时eventsEnrichedEvent;

请尝试以下操作:

从:

.populate('source', 'EnrichedEvents')

自:

.populate('events', 'EnrichedEvent')

编辑:

更新EnrichedEvent架构:

events: [{
mongoose.Schema.Types.ObjectId, 
ref: 'EnrichedEvent'
}]

它现在应该可以工作了。

我尝试使用类似的.populate('...', '...')方法,但没有成功。我会使用

.populate('source').populate('EnrichedEvent')

('EnrichedEvents'),具体取决于您在架构中定义的内容。

最新更新