【发布时间】:2018-08-28 00:50:29
【问题描述】:
我在使用 mongoose 方面非常陌生,并且在 mongodb 上完成了简单的数据库工作。
看到我的用例,我发现了这种在 mongodb 中使用 mongoose 的方法。但是,我没有得到教程中所示的预期结果。
我的架构
var EventsSchema = new mongoose.Schema({
root: {type: mongoose.Schema.Types.ObjectId, ref: 'root'},
voting: [{type: mongoose.Schema.Types.ObjectId, ref: 'Voting'}]
});
var VotingSchema = new mongoose.Schema({
events: {type: mongoose.Schema.Types.ObjectId, ref: 'Events'},
title: {
type: String,
required: true
}
})
var Events = mongoose.model('Events', EventsSchema, 'event');
var Voting = mongoose.model('Voting', VotingSchema, 'voting');
我最初有这两种模式。我想创建一个投票活动。创建投票事件后,voting schema 中的事件 ID 应按建议存储,我更希望将投票事件引用存储在 EventSchema 中。
var events = new Events({});
events.save()
.then((events) => {
var voting = new Voting({ events: events._id, title: "Test Title" });
voting.save()
.then((voting) => {
Voting.findOne({title: 'Test Title'})
.populate('events')
.exec(function(err, voting){
console.log(voting, err);
if(err) res.sendStatus(401).send();
else res.sendStatus(200).send();
})
})
.catch((e) => {
res.sendStatus(401).send();
});
})
.catch((e) => {
res.sendStatus(401).send();
})
我在控制台上得到的是
{
_id: 5b83eca82a3cfb1dec21ddc9,
events: { voting: [], _id: 5b83eca82a3cfb1dec21ddc8, __v: 0 },
title: 'Test Title',
__v: 0
}
我的 MongoDB 是这样的
投票
{
"_id" : ObjectId("5b83eca82a3cfb1dec21ddc9"),
"events" : ObjectId("5b83eca82a3cfb1dec21ddc8"),
"title" : "Test Title",
"__v" : 0
}
事件
{
"_id" : ObjectId("5b83eca82a3cfb1dec21ddc8"),
"voting" : [],
"__v" : 0
}
我不确定我的 mongodb 会是什么样子。但是在尝试了代码后,它看起来像上面一样。
我一定是做错了什么或者错过了一些重要的事情。但是这种代码也存在于文档中。 docs link。帮我整理一下这个问题。
谢谢
【问题讨论】:
-
请详细阅读mongoosejs.com/docs/subdocs.html。它包含如何添加子文档的方法
-
@deepakthomas 感谢您的链接。
标签: node.js mongodb mongoose mongoose-schema mongoose-populate