我应该如何在 Mongoose 中连接 Schema 模型?

Posted

技术标签:

【中文标题】我应该如何在 Mongoose 中连接 Schema 模型?【英文标题】:How should i connect Schema models in Mongoose? 【发布时间】:2020-08-01 15:51:51 【问题描述】:

我想创建一个用户、发布和评论。将它们连接在一起,当我创建一个帖子时,它应该连接到我的一个用户。我不知道为什么我得到一个不寻常的错误。错误:

ID cannot represent value: <Buffer 5e 9b f1 3e e9 49 61 38 fc 1a 6f 59>

这些都是我的代码,所以如果你知道我的问题是什么,请帮我解决它。谢谢

类型定义:

import  gql  from 'apollo-server-express';

export const typeDefs = gql`

    type User 
        id: ID!
        name: String!
        email: String!
        age: Int
        posts: [Post!]!
        comments: [Comment!]!
    

    type Post 
        id: ID!
        title: String!
        body: String!
        published: Boolean!
        author: User!
        comments: [Comment!]!
    

    type Comment 
        id: ID!
        text: String!
        author: User!
        post: Post!
    
`

用户架构:

import mongoose,  mongo  from 'mongoose';

const userSchema = new mongoose.Schema(
    name: 
        type: String,
        required: true
    ,
    email: 
        type: String,
        required: true
    ,
    age: 
        type: Number,
        required: false
    ,
    posts: [
        
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Post'
        
    ],
    comments: [
        
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Comment'
        
    ]
);

module.exports = mongoose.model('User',userSchema);

后架构:

import mongoose from 'mongoose';

const postSchema = new mongoose.Schema(
    title: 
        type: String,
        required: true
    ,
    body: 
        type: String,
        required: true
    ,
    published: 
        type: Boolean,
        required: true
    ,
    author: 
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    ,
    comments: [
        
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Comment'
        
    ]
);

module.exports = mongoose.model('Post',postSchema);

评论架构:

import mongoose from 'mongoose';

const commentSchema = new mongoose.Schema(
    text: 
        type: String,
        required: true
    ,
    author: 
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    ,
    post: 
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Post'
    
);

module.exports = mongoose.model('Comment',commentSchema);

解析器:

import Users from './models/User';
import Posts from './models/Post';
import Comments from './models/Comment';


export const resolvers = 
    Mutation: 
        createUser: async (parent, args, context, info) => 
            const user = new Users(args);
            await user.save();

            return user;
        ,
        createPost: async (parent,  title, body, published, author , context, info) => 
            const user = await Users.findById(author);

            if (!user) 
                console.log("User not found")
            
            console.log(user)

            const post = new Posts( title, body, published, author: user.id );
            await post.save();

            user.posts.push(post);
            await user.save();

            return post;
        
    

【问题讨论】:

请给我们一小部分您的代码。 @DanStarns 好的,但我想确保没有遗漏任何东西 【参考方案1】:

我找到了解决方案,您应该使用 type: mongoose.Schema.Types.ObjectIdref: 'Comment',然后在解析器中使用 population。

【讨论】:

以上是关于我应该如何在 Mongoose 中连接 Schema 模型?的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoose 聚合填充值

如何在 Mongoose 中使用 MixedId 字段和另一个字段作为 ObjectId 的连接

使用Mongoose(ORM)将多个应用程序与一个mongo数据库连接

导入的成员无法创建 Mongoose 模型

Node.js - Mongoose - 在这种情况下,我应该如何分配多个多对一关系?

如何使用用户名和密码连接 mongodb(mongoose)?