【问题标题】:How to do a mutation with graphql and mongoose如何使用 graphql 和 mongoose 进行突变
【发布时间】:2021-02-17 12:32:30
【问题描述】:

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

我按照graphql-compose-mongoosedocumentation创建了一个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 操场上进行尝试。我似乎无法弄清楚如何。我试过将该字段作为参数传递,但它不起作用。

【问题讨论】:

    标签: node.js mongoose graphql graphql-compose-mongoose


    【解决方案1】:

    最后我确实想通了。突变看起来像这样:

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

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

    【讨论】:

    • 你知道这是为什么吗?如果有办法解决这个问题,因为使用查询不需要使用“记录”。
    猜你喜欢
    • 2019-04-04
    • 2021-12-02
    • 1970-01-01
    • 2018-12-20
    • 2016-05-30
    • 2020-08-15
    • 2018-09-03
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多