有没有办法用 Mongoose 在 Express Js 的两个集合中存储一对一、一对多或多对多关系(Id)?

问题描述 投票:0回答:1

我有两个不同的模式UserArticle 用户可以发布多篇文章,其关系是一对多 架构如下

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 为什么这没有发生?因为我已经在他们的模式中建立了关系

node.js mongodb express mongoose relationship
1个回答
0
投票

通过在文章中添加仅将您的文章文档映射到用户,您还必须按文章更新用户。 您可以这样做: 1.保存(创建)文章后,您将获得文章文档。 2.使用该文章文档 ID(article._id) 在您的用户中插入文章字段。

我认为这是将用户映射到文章的唯一方法,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.