如何使用 graphql 和 mongoose 进行突变
Posted
技术标签:
【中文标题】如何使用 graphql 和 mongoose 进行突变【英文标题】:How to do a mutation with graphql and mongoose 【发布时间】:2021-02-17 12:32:30 【问题描述】:我有一个带有mongoose
、graphql
和graphql-compose-mongoose
的后端。
我按照graphql-compose-mongoose
documentation创建了一个User模型和schema,如下:
型号
import mongoose, Schema from 'mongoose';
import composeMongoose from 'graphql-compose-mongoose';
export const UserSchema = new Schema(
phone: type: String ,
name: type: String ,
email: type: String, required: true ,
password: type: String, required: true ,
photos: type: Array ,
matchId: type: Schema.Types.ObjectId ,
created: type: Date, default: Date.now ,
active: type: Boolean, default: false
);
export const User = mongoose.model('User', UserSchema);
export const UserTC = composeMongoose(User);
Graphql 架构
import User, UserTC from '../models/User';
import schemaComposer from 'graphql-compose';
schemaComposer.Query.addFields(
userById: UserTC.mongooseResolvers.findById(),
userByIds: UserTC.mongooseResolvers.findByIds(),
userOne: UserTC.mongooseResolvers.findOne(),
userMany: UserTC.mongooseResolvers.findMany(),
userDataLoader: UserTC.mongooseResolvers.dataLoader(),
userDataLoaderMany: UserTC.mongooseResolvers.dataLoaderMany(),
userCount: UserTC.mongooseResolvers.count(),
userConnection: UserTC.mongooseResolvers.connection(),
userPagination: UserTC.mongooseResolvers.pagination()
);
schemaComposer.Mutation.addFields(
userCreateOne: UserTC.mongooseResolvers.createOne(),
userCreateMany: UserTC.mongooseResolvers.createMany(),
userUpdateById: UserTC.mongooseResolvers.updateById(),
userUpdateOne: UserTC.mongooseResolvers.updateOne(),
userUpdateMany: UserTC.mongooseResolvers.updateMany(),
userRemoveById: UserTC.mongooseResolvers.removeById(),
userRemoveOne: UserTC.mongooseResolvers.removeOne(),
userRemoveMany: UserTC.mongooseResolvers.removeMany()
);
const graphqlSchema = schemaComposer.buildSchema();
export default graphqlSchema;
我想创建一个具有 userCreateOne
突变的用户,我正在 GraphQL 操场上进行尝试。我似乎无法弄清楚如何。我试过将该字段作为参数传递,但它不起作用。
【问题讨论】:
【参考方案1】:最后我确实想通了。突变看起来像这样:
mutation
userCreateOne(record: email: "email@example.com", password: "12345")
record
email
password
matchId
created
active
userCreateOne
(和猫鼬解析器createOne
)接受一个对象record
,该对象内部是您在架构中定义的字段。
【讨论】:
你知道这是为什么吗?如果有办法解决这个问题,因为使用查询不需要使用“记录”。以上是关于如何使用 graphql 和 mongoose 进行突变的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Mongoose 与 GraphQL 和 DataLoader 一起使用?
GraphQL、Relay 和 Mongodb (mongoose) 如何获取数组
graphql + mongoose + typescript,如何减少重复的模型定义
如何在本地使用带有 express 的 graphql 和带有 mongoose 的 mongodb 来检索文档?