如何用Gremlin查询创建带嵌套属性的AWS Neptune节点
创建带嵌套属性的AWS Neptune节点(顶点属性的属性)
你要实现的是TinkerPop中的顶点属性的属性(Vertex Property Properties),也就是给顶点的属性附加元数据(比如示例中location的startTime/endTime),AWS Neptune完全支持该特性,以下是具体实现方法:
1. 用Gremlin直接创建
使用Gremlin语句创建顶点,并为顶点属性添加嵌套元数据:
// 创建person顶点,同时添加多个带元数据的location属性 g.addV('person') .property(list, 'location', 'san diego', 'startTime', 1997, 'endTime', 2001) .property(list, 'location', 'santa cruz', 'startTime', 2001, 'endTime', 2004) .property(list, 'location', 'brussels', 'startTime', 2004, 'endTime', 2005) .property(list, 'location', 'santa fe', 'startTime', 2005)
关键说明:
- 必须指定
list作为属性基数(cardinality):因为一个顶点需要存储多个location条目,Neptune支持list(有序可重复)、set(无序不重复)、single(单值)三种基数,这里用list匹配示例需求。 - 嵌套属性的添加方式:在
property()方法中,属性值(如'san diego')之后直接跟元数据的键值对(如'startTime', 1997),这些就是该顶点属性的嵌套属性。
2. 查询验证嵌套属性
用Gremlin查询验证是否正确存储了嵌套属性:
// 取出person顶点的所有location属性及其元数据 g.V().hasLabel('person').properties('location') .project('value', 'startTime', 'endTime') .by(value()) // 获取location的具体值 .by('startTime') // 获取嵌套属性startTime .by(coalesce('endTime', constant(null))) // 处理无endTime的情况,返回null
执行后会返回和你提供的示例结构一致的结果。
3. 批量导入注意事项
如果使用批量导入(如CSV/JSON),需遵循TinkerPop GraphSON 3.0格式(即你提供的示例格式),导入时指定格式版本为graphson3,确保嵌套属性结构被正确解析。
内容的提问来源于stack exchange,提问作者Tomás Santos
相关产品推荐
相关产品推荐

