Добавить массив идентификаторов в мутацию GraphQL - PullRequest
0 голосов
/ 07 февраля 2020

Я изучаю GraphQL и создаю приложение для конечных пользователей, чтобы ввести план страхования и вернуть врачей в их районе, которые принимают выбранную страховку. Я пытаюсь включить в мою мутацию массив «docId» и «insId», чтобы у каждого Доктора и каждого Плана был массив принятых и принимаемых докторами соответственно.

Вот настройка Mutation:

// Must find a way to add an array of 'docId's and 'insId's
// to their respective mutations.
const Mutation = new GraphQLObjectType({
    name: 'Mutation',
    fields: {
        addDoctor: {
            type: DoctorType,
            args: {
                doctorName: { type: GraphQLString },
                city: { type: GraphQLString },
                specialty: { type: GraphQLString },
                insId: { type: GraphQLID }
            },
            resolve(parent, args){
                let doctor = new Doctor({
                    doctorName: args.doctorName,
                    city: args.city,
                    specialty: args.specialty,
                    insId: [args.insId]
                });
                return doctor.save();
            }
        },
        addPlan: {
            type: InsuranceType,
            args: {
                insName: { type: GraphQLString },
                usualCoPay: { type: GraphQLString },
                docId: { type: GraphQLID }
            },
            resolve(parent, args){
                let plan = new Plan({
                    insName: args.insName,
                    usualCoPay: args.usualCoPay,
                    docId: [args.docId]
                });
                return plan.save();
            }
        }
    }
})

Вот модели mon goose:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const doctorSchema = new Schema({
    doctorName: String,
    city: String, 
    specialty: String,
    insId: Array
})

module.exports = mongoose.model('Doctor', doctorSchema);
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const planSchema = new Schema({
    insName: String,
    usualCoPay: String,
    docId: Array
});

module.exports = mongoose.model('Plan', planSchema);

При попытке добавить массив каждого id в GraphiQL вот так:

mutation {
    addPlan(insName:"United", usualCoPay: "$30", docId: ["5e37548b42037513e5dfc790", "5e37544642037513e5dfc78f", "5e3754b842037513e5dfc791"]){
            insName
        usualCoPay
    }
  }

Я получаю

{
  "errors": [
    {
      "message": "Expected type ID, found [\"5e37548b42037513e5dfc790\", \"5e37544642037513e5dfc78f\", \"5e3754b842037513e5dfc791\"].",
      "locations": [
        {
          "line": 2,
          "column": 57
        }
      ]
    }
  ]
}

Любые идеи относительно того, что мне нужно изменить, чтобы убедиться, что я могу поместить в массив каждый идентификатор? Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще из моего текущего кода.

1 Ответ

0 голосов
/ 07 февраля 2020

В GraphQL List - это тип wrapping , который переносит другой тип и представляет список или массив того типа, который он переносит. Таким образом, список строк ([String]) будет представлять массив строк. Если ваш аргумент принимает список идентификаторов, тогда ваш тип аргумента должен быть [ID]. Программно, мы пишем это как:

new GraphQLList(GraphQLID)

Вы также можете запретить включение нулей в предоставленный список, в этом случае мы бы сделали:

new GraphQLList(new GraphQLNonNull(GraphQLID))

или если весь аргумент никогда не должен быть нулевым:

new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(GraphQLID)))
...