为什么我的GraphQL查询返回一条记录失败,但是我的查找所有记录的查询工作正常?

时间:2018-11-01 20:12:01

标签: javascript mongoose 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 个答案:

答案 0 :(得分:1)

很明显,find返回文档的数组,而findOne返回单个文档。因此,无论使用find怎样获取数组,查询都可能成功。 findOne返回您要查找的文档。您的查询没有失败,它返回了一个带有数组的Promise。

如果您这样做

resolve(parent, args) {
            return Word.find({word: args.word}).then(c=>{console.log(c);return c})
}

您将在控制台中看到一个包含文档的数组。