Я пытаюсь создать базу данных отношений один-ко-многим с Mongoose и GraphQL.
Всякий раз, когда я вставляю данные в аргумент мутации graphql, я получаю ошибку [Object: null prototype]
Я заметил, что объект будет иметь [Object: null prototype] перед ним, когда я попытался console.log для целей отладки.
Я пробовал много способов, пытался отобразить () аргументы или дажеиспользовать replace (), но не повезло.Все, что я получаю, это «args.ingredient.map/replace не является функцией»
Я тестировал жестко запрограммированный метод, меняя аргументы, например
args.category = '5c28c79af62fad2514ccc788'
args.ingredient = '5c28c8deb99a9d263462a086'
Удивительно, но он работает сэтот метод, я предполагаю, что входные данные не могут быть объектом, а просто идентификатором.
Фактические результаты приведены ниже.
Resolvers
Query: {
recipes: async (root, args, { req }, info) => {
return Recipe.find({}).populate('ingredient category', 'name createdAt').exec().then(docs => docs.map(x => x))
},
},
Mutation: {
addRecipe: async (root, args, { req }, info) => {
// args.category = '5c28c79af62fad2514ccc788'
// args.ingredient = '5c28c8deb99a9d263462a086'
// console.log(args.map(x => x))
return Recipe.create(args)
}
}
TypeDef
extend type Mutation {
addRecipe(name: String!, direction: [String!]!, ingredient: [IngredientInput], category: [CategoryInput]): Recipe
}
type Recipe {
id: ID!
name: String!
direction: [String!]!
ingredient: [Ingredient!]!
category: [Category!]!
}
input IngredientInput {
id: ID!
}
input CategoryInput {
id: ID!
}
Модели
const recipeSchema = new mongoose.Schema({
name: String,
direction: [String],
ingredient: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Ingredient' }],
category: { type: mongoose.Schema.Types.ObjectId, ref: 'Category' }
}, {
timestamps: true // createdAt, updateAt
})
const Recipe = mongoose.model('Recipe', recipeSchema)
Это результат, который я консоль записываю в журнал аргументы при вставке данных
{
name: 'Butter Milk Chicken TEST2',
direction: [ 'Step1', 'Step2', 'Step3' ],
ingredient:[[Object: null prototype] { id: '5c28c8d6b99a9d263462a085' }],
category: [[Object: null prototype] { id: '5c28c79af62fad2514ccc788' }]
}
Я предполагаю, что мне нужно получить что-то вроде этого
{
name: 'Butter Milk Chicken TEST2',
direction: [ 'Step1', 'Step2', 'Step3' ],
args.category = ['5c28c79af62fad2514ccc788']
args.ingredient = ['5c28c8ccb99a9d263462a083', '5c28c8d3b99a9d263462a084', '5c28c8d6b99a9d263462a085']
}