现在我真的很困惑,我是否需要将objectId推送到两个架构或者只是将它保存在一个架构中?
我的架构
var CourseSchema = Schema({
title: String,
content: [{ type: Schema.Types.ObjectId, ref: 'Video'}],
});
var VideoSchema = Schema({
ownedBy: { type: Schema.Types.String, ref: 'Course'},
name: String
});
架构目标
假设我要创建一个新的视频对象,然后将其ownedby
字段存储到特定的课程对象
这是代码
app.get('/testData', function(req, res) {
Course.findOne({ title: "Testing Course" }, function(err, course) {
// Create a new video object
var video = new Video();
// store the object id into ownedby field, so that it belongs "Testing Course"
video.ownedBy = course._id;
video.title = newData.name;
// save it
video.save(function(err, vid) {
// Is it necessarily for me to push each video object to a course's content field?
course.content.push(vid._id);
});
});
});
如果您阅读了评论,那么您就知道我面临的是什么,如果没有,请让我再解释一下
FindOne一个与Course's系列相匹配的特定标题 是"测试课程"
制作新视频的对象,然后将其存储到视频中
ownedBy
字段
保存课程的对象,然后将每个视频的ID推送到其中 内容。
没有错误或任何错误,但是将对象id同时推送到两个模式对我来说有点多余
真正的问题是,我真的需要将对象ID推送到两个模式吗?
答案 0 :(得分:1)
您必须使用引用更新这两个对象。这意味着您还需要使用video _id更新Course对象。目前您正在使用findOne(),它只返回文档,而不是更新文档。
以下是代码示例:
Course.findOne({ title: "Testing Course" }, function(err, course) {
if (err) return handleError(err);
var video = new Video();
video.ownedBy = course._id;
video.title = newData.name;
video.save(function(err, vid) {
if (err) return handleError(err);
course.content.push(vid._id);
course.save(function(err) {
if (err) return handleError(err);
});
});
});