我应该如何在 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.ObjectId
和 ref: 'Comment'
,然后在解析器中使用 population。
【讨论】:
以上是关于我应该如何在 Mongoose 中连接 Schema 模型?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Mongoose 中使用 MixedId 字段和另一个字段作为 ObjectId 的连接
使用Mongoose(ORM)将多个应用程序与一个mongo数据库连接