Я писал API, который использует GraphQL. Я до сих пор довольно новичок в этом и сталкивался с некоторыми проблемами, связанными с мутациями. Упрощенная форма моего API имеет два типа записей. Существует запись контакта и запись тега. Запись контакта может содержать несколько записей тегов.Как сделать мутацию GrahpQL с вложенной схемой
Схема я написал для каждого из этих типов записей ниже:
const Tag = new graphQL.GraphQLObjectType({
name: 'Tag',
description: 'Categorizes records into meaningful groups',
fields:() => ({
_id: {
type: graphQL.GraphQLID
},
name: {
type: graphQL.GraphQLString
}
})
});
const Contact = new graphQL.GraphQLObjectType({
name: 'Contact',
description: 'Contact record',
fields:() => ({
_id: {
type: graphQL.GraphQLID
},
name: {
type: graphQL.GraphQLString
},
tags: {
type: new graphQL.GraphQLList(Tag),
resolve: function(src, args, context) {
return TagModel.findByContactId(src._id)
.then(tags => {
return Promise.map(tags, (tag) => {
return TagModel.findById(tag.tag_id);
});
});
}
}
})
});
я могу сделать мутацию достаточно легко на записях, таких как теги, так как они не содержат вложенные записи своих собственных, но я «Не знаю, как сделать мутацию на записи, например, контакты, так как она также может содержать теги. Мутация код, который я поставил на месте выглядит следующим образом:
const Mutation = new graphQL.GraphQLObjectType({
name: 'Mutation',
fields: {
createContact: {
type: Contact,
description: "Create Contact",
args: {
name: {type: new graphQL.GraphQLNonNull(graphQL.GraphQLString)},
tags: {type: new graphQL.GraphQLList(Tag)}
},
resolve: function(source, args) {
return ContactModel.save(args.name);
}
}
}
});
Я не уверен, как завершить распознаватель в мутацией для того, чтобы иметь возможность сохранить контакт и запись тегов в то же время. Например, если я сделал запрос мутацию, чтобы сохранить новую запись контакта с новым тегом, как это:
{"query": "mutation createNewContact {
contact: createContact (name: "John Smith", tags { name: "family" })
{_id, text, tags { name } } }" }
есть что-то особенное, что мне нужно сделать в моей мутации схемы для того, чтобы обеспечить для этого типа мутация должна произойти?
Это работает. Благодаря! У меня есть проблема, хотя с возвратом данных тегов в ответ. Даже когда я просто возвращаю аргументы в resolver, когда ничего не делаю, все свойства возвращаются, но теги - просто пустой массив. Что-то вроде {contact: _id: 1, name: "John", tags: []}. Мне не хватает чего-то, что необходимо для возвращения данных тегов? – tbergen1