0

I have following MongoDB schema.

Item {
  _id: ObjectId,
  translations: [{
    language: String
    name: String
  }]
}

So my Item instance could look something like this.

{
  _id: ObjectId("5ba3bf09d3121aba3ba2f488"),
  translations: [
  {
    language: "en"
    name: "a Car"
  },
  {
    language: "de",
    name: "der Wagen"
  }]
}

And I want to be able to query my data with specific language with Graphql this way.

{
  item(where: {language: "en"}) {
    name
  }
}

So it would produce nice output with shape like this.

{
  name: "a Car"
}

Please can you tell me some good practice or nice way I can setup my Graphql resolvers map?

I'm using Apollo Server.

Thank you very much!

4

1 回答 1

4

语言特定查询(具有多个字段)的一般解决方案可能是:

  • 将语言参数传递给查询解析器
  • 将语言存储在解析器上下文中
  • 在需要的地方使用上下文中的语言

询问:

query {
  item(language: "en") {
    name
    otherField
  }
}

解析器:

{
  item: (_, { language }, context) => {
    context.language = language;
    return {
      name: (_, context) => getNameByLang(context.language),
      otherField: (_, context) => getOtherByLang(context.language),
    };
  },
}

或者,如果只有一个翻译字段:

query {
  item {
    name(language: "en")
  }
}

因此,您可以直接在名称解析器中将语言作为参数。

{
  item: () => ({
    name: ({ language }) => getNameByLang(language),
  })
}
于 2019-02-25T19:55:18.380 回答