GraphQL模式的图形数据库设计
Graph db design to GraphQL schema
我正试图从我拥有的图形数据库模式创建一个graphql模式。但我不知道如何在graphql模式中为我所拥有的边添加属性。
在某些代码中:
示例数据库模式:
node: {
label: 'Person',
properties: [
id: { type: id }
name: { type: string }
]
}
edge: {
label: 'friends'
startNode: 'Person',
endNode: 'Person'
properties: {
since: { type: date }
}
}
在graphql中,模式看起来应该非常简单:
var personType = new graphql.GraphQLObjectType({
name: 'personType',
fields: function() { return {
id: { type: graphql.GraphQLString },
name: { type: graphql.GraphQLString },
friends: { type: graphql.GraphQLList(personType) }
}})
});
但我看不出有什么方法可以将属性"since"添加到friends字段中。我在文件或互联网上找不到任何东西。
规范中有什么东西吗?或者我需要根据节点为所有边创建新的类型,添加诸如"since"之类的附加属性并使用它们。还是其他我想不通的事情?
示例中继应用程序的模式,在这种特殊情况下的星球大战项目,非常有用。Faction
和Ship
在您的案例中扮演Person
和Friend
的角色。
你是对的。为了包含since
属性,可以为friend引入一种新的类型,如下所示(使用graphql-npm包):
var friendType = new GraphQLObjectType({
name: 'Friend',
fields: {
id: globalIdField('Friend'),
name: {
type: GraphQLString,
resolve: (friend) => friend.name,
},
since: {
type: GraphQLString,
resolve: (friend) => friend.since.toString(),
},
},
interfaces: [nodeInterface],
});
在friendType
中,since
是实际日期的字符串表示。如果你想要一个自定义的GraphQL日期类型,你可以看看GraphQL自定义日期类型。不过我没有用过。在您已经定义的personType
中,对于friends
字段,列表元素类型personType
需要替换为新的friendType
:
friends: { type: graphql.GraphQLList(friendType) }
如果朋友数量很大,建议连接或边缘,正如ykad4已经建议的那样。一旦我们有了Friend的定义,我们就可以如下定义它的连接:
const {
connectionType: friendConnection,
edgeType: friendEdge,
} = connectionDefinitions({
name: 'Friend',
nodeType: friendType,
});
personType
中的字段friends
将更新如下(使用graphql-ready-npm包中的助手函数):
friends: {
type: friendConnection,
args: connectionArgs,
resolve: (person) => connectionFromArray(person.friends, args),
},
相关文章:
- 从数据库预填充模式(非引导)
- 使用模式消息/窗口显示数据库记录
- 如何获取所有旅行模式的距离和持续时间,例如驾驶,公交,骑自行车,在我的页面中步行以及将其存储在数据库中
- 流星技术/模式,用于等待数据库变量更改,然后在 in 之后执行某些操作
- Node.js+Mongoose:与数据库逻辑分离的模型/模式
- 将图形坐标从画布保存到数据库
- GraphQL模式的图形数据库设计
- 使用数据库中的两个变量在jqplot中显示图形
- 用于Web应用程序中网络表示的图形数据库
- 将数据库行“馈送”到接口的模式
- 获取在模式中输入的数据以保存在数据库中
- 高图表下载带有模式的图形作为 svg
- 在图形数据库中存储标记
- 使用 Jqplot 绘制图形和来自 Sqlite 数据库的数据
- html 我需要用图形代替 vcr 控件的文本来控制数据库中的状态
- amcharts与RubyonRails的集成:使用数据库中的数据填充图形
- 为登录/注册模式实现正确的php数据库访问
- 从引导模式获取值,进行处理,然后将值插入数据库
- 图形数据库和javascript
- 设计用于处理电子邮件系统中类似颜色的数据库模式