如何用graphql和猫鼬做突变

问题描述

我有一个mongoosegraphqlgraphql-compose-mongoose的后端。

我遵循graphql-compose-mongoose documentation来创建用户模型和架构,如下所示:

型号

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,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游乐场中对其进行尝试。我似乎不知道如何。我尝试过将字段作为参数传递,但是它不起作用。

解决方法

我最终弄清楚了。突变看起来像这样:

mutation {
  userCreateOne(record: {email: "email@example.com",password: "12345"}) {
    record {
      email
      password
      matchId
      created
      active
    }
  }
}

userCreateOne(和猫鼬解析器createOne)接受对象record,并且在该对象内部是您在架构中定义的字段。