我有一个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”查询失败?
答案 0 :(得分:1)
很明显,find返回文档的数组,而findOne返回单个文档。因此,无论使用find怎样获取数组,查询都可能成功。 findOne返回您要查找的文档。您的查询没有失败,它返回了一个带有数组的Promise。
如果您这样做
resolve(parent, args) {
return Word.find({word: args.word}).then(c=>{console.log(c);return c})
}
您将在控制台中看到一个包含文档的数组。