Добавить массив идентификаторов в мутацию GraphQL

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

Вот настройка мутации:

// 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();
            }
        }
    }
})

Вот модели мангустов:

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);

При попытке добавить массив каждого идентификатора в 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
        }
      ]
    }
  ]
}

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


person cloudbvsting    schedule 06.02.2020    source источник


Ответы (1)


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

new GraphQLList(GraphQLID)

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

new GraphQLList(new GraphQLNonNull(GraphQLID))

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

new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(GraphQLID)))
person Daniel Rearden    schedule 06.02.2020
comment
Именно то, что мне нужно. Думаю, я понял, что мне, вероятно, придется использовать GraphQLLList, но не был уверен, так ли просто, как обернуть GraphQLID этим. Спасибо! - person cloudbvsting; 07.02.2020