我有两个不同的模式User和Article 用户可以发布多篇文章,其关系是一对多 架构如下
const mongoose = require("mongoose");
const userSchema = mongoose.Schema(
{
username: {
type: String,
required: [true, "Please add the username"],
}
articles: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Article'
}]
);
module.exports = mongoose.model("User", userSchema);
文章架构是:
const mongoose = require("mongoose");
const articleSchema = mongoose.Schema(
{
postTitle: {
type: String,
required: [true, "Please add Post Title"],
},
publisher: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
);
module.exports = mongoose.model("Article", articleSchema);
这是我创建的文章控制器:
const createArticle = asyncHandler( async(req, res, next) =>
{
const { postTitle } = req.body;
const currentUser = req.user;
const article = await Article.create(
{
postTitle,
publisher: currentUser.id
}
)
res.status(201).json(article);
}
);
我期望当我创建一篇文章时,发布者会获取确实正在发生的用户对象,但我期望的是用户对象字段文章也应该填充该文章 ID 为什么这没有发生?因为我已经在他们的模式中建立了关系
通过在文章中添加仅将您的文章文档映射到用户,您还必须按文章更新用户。 您可以这样做: 1.保存(创建)文章后,您将获得文章文档。 2.使用该文章文档 ID(article._id) 在您的用户中插入文章字段。
我认为这是将用户映射到文章的唯一方法,反之亦然。