Javascript 在mongoose中填充方法(节点js)
我试图在节点js中使用populate。 我正试图将一个集合的objectId访问到另一个集合中。 例如,我有一个叫做项目和事件的集合, 我有这样的模式 项目架构:Javascript 在mongoose中填充方法(节点js),javascript,node.js,mongodb,mongoose,mongoose-populate,Javascript,Node.js,Mongodb,Mongoose,Mongoose Populate,我试图在节点js中使用populate。 我正试图将一个集合的objectId访问到另一个集合中。 例如,我有一个叫做项目和事件的集合, 我有这样的模式 项目架构: const projectSchema = mongoose.Schema({ _id: mongoose.Schema.Types.ObjectId, projectName: { type: String, required: true, unique: true
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。请给我指出正确的方向。填充方法从填充的文档中获取字段\u填充和字段\u到\u返回,\u并以相反的方式传递。此外,在项目模式中,您已将事件用于EnrichedEvent,因此在填充时使用事件而不是EnrichedEvent
请尝试以下操作:
发件人:
.填充“源”、“EnrichedEvents”
致:
.填充“事件”,“EnrichedEvent”
编辑:
更新EnrichedEvent的架构:
现在应该可以了 抱歉,jsut看到您已将EnrichedEvents定义为项目架构中的事件。我已经更新了我的答案,请立即尝试,看看它是否有效。给出错误:{error:{message:Cast to ObjectId失败,路径\\u id\for model\EnrichedEvent\,名称:CastError,stringValue:\123456\,种类:ObjectId,值:123456,路径:\u id}123456似乎不是mongodb ObjectId。这就是为什么我猜它是错误的。你能检查一下你是否收到了正确的mongodb ObjectId for events吗?我需要将数据发布到enrichedEvents模式中,然后我必须将eventid更新到项目中,然后它才能工作。但是我需要projects模式来自动更新与相应projectId相关的eventid。@darshanan你能分享一下你在console.logresult中得到的东西吗;邮政路线
events: [{
mongoose.Schema.Types.ObjectId,
ref: 'EnrichedEvent'
}]