Почему мой запрос GraphQL на возврат одной записи не удался, а мой запрос на поиск всех записей работает нормально?
У меня есть база данных Mongo с коллекцией под названием "words", которая содержит такие документы:
{
_id: "xxxx",
word: "AA",
definition: "Cindery lava"
}
У меня есть приложение узла, которое я использую для запроса и отображения информации из коллекции слов с помощью GraphQL. Я создал схему GraphQL и модель Mongoose, как показано ниже.
// Schema
const WordType = new GraphQLObjectType({
name: 'Word',
fields: () => ({
id: {type: GraphQLID},
word: { type: GraphQLString },
definition: { type: GraphQLString },
})
})
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
detailsForWord: {
type: WordType,
args: {word: {type: GraphQLString}},
resolve(parent, args) {
return Word.find({word: args.word});
}
},
allWords: {
type: new GraphQLList(WordType),
resolve(parent, args) {
return Word.find({}).limit(100);
}
}
}
});
// model
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const wordSchema = new Schema({
word: String,
definition: String,
});
Моя проблема в том, что запрос "allWords" работает отлично, но "detailsForWord" не работает вообще, и я понятия не имею, почему.
В GraphiQL я использую эти запросы:
{
allWords {
word
definition
}
}
... а также
{
detailsForWord(word: "AA") {
word
definition
}
}
Первый возвращает записи, но последний всегда возвращает следующее в GraphiQL:
{
"data": {
"detailsForWord": {
"id": null,
"word": null,
"definition": null
}
}
}
Любые идеи, почему запрос "detailsForWord" не удается?
1 ответ
Очевидно, find возвращает массив документов, а findOne возвращает один документ. Поэтому запрос может быть успешным, вы получаете массив независимо от того, что с find. findOne возвращает документ, который вы ищете. Ваш запрос не дал сбоя, он вернул обещание с массивом.
если вы делаете
resolve(parent, args) {
return Word.find({word: args.word}).then(c=>{console.log(c);return c})
}
Вы увидите массив, содержащий документ в консоли.