我有以下MongoDB模式。
Item {
_id: ObjectId,
translations: [{
language: String
name: String
}]
}
所以我的Item实例可能看起来像这样。
{
_id: ObjectId("5ba3bf09d3121aba3ba2f488"),
translations: [
{
language: "en"
name: "a Car"
},
{
language: "de",
name: "der Wagen"
}]
}
我希望能够以这种方式使用Graphql查询特定语言的数据。
{
item(where: {language: "en"}) {
name
}
}
因此它将产生具有这样形状的漂亮输出。
{
name: "a Car"
}
请您告诉我一些好的做法或好的方法来设置我的Graphql解析器映射吗?
我正在使用Apollo Server。
非常感谢您!
答案 0 :(得分:0)
针对特定语言的查询(具有多个字段)的一般解决方案可能是:
查询:
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),
})
}