>

다음과 같은 문서를 포함하는 'words'라는 컬렉션이있는 Mongo 데이터베이스가 있습니다.

{
  _id: "xxxx",
  word: "AA",
  definition: "Cindery lava"
}

GraphQL을 사용하여 단어 모음의 정보를 쿼리하고 표시하는 데 사용하는 노드 앱이 있습니다. 아래와 같이 GraphQL 스키마와 몽구스 모델을 만들었습니다.

// 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"는 전혀 작동하지 않으며 이유를 전혀 모릅니다.

GraphicQL에서 다음 쿼리를 사용하고 있습니다 :

{
  allWords {
    word
    definition
  }
}

... 및

{
  detailsForWord(word: "AA") {
    word
    definition
  }
}

전자는 레코드를 반환하지만 후자는 GraphiQL에서 항상 다음을 반환합니다.

{
  "data": {
    "detailsForWord": {
      "id": null,
      "word": null,
      "definition": null
    }
  }
}

"detailsForWord"쿼리가 실패한 이유는 무엇입니까?

  • 답변 # 1

    분명히 find는 문서의 배열을 반환하고 findOne은 단일 문서를 반환합니다. 따라서 쿼리 결과가 무엇이든 찾기에 관계없이 배열을 얻는 데 성공할 수 있습니다. findOne은 찾고있는 문서를 반환합니다. 쿼리가 실패하지 않고 배열과 함께 약속을 반환했습니다.

    만약

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

    콘솔에 문서가 포함 된 배열이 나타납니다.

관련 자료

  • 이전 flutter - 빌드 메소드 외부에서 mediaqueryof (context) widthheight에 어떻게 액세스합니까?
  • 다음 html - 두 개의 링크가있는 하나의 fa 아이콘