Azure CosmosDB Graph(GREMLIN API):如何查询两个顶点的指定属性(含schema)
解决Azure Cosmos DB Gremlin查询获取指定属性的问题
要得到你期望的输出格式,你需要调整查询的结构,不再只提取顶点ID,而是直接构造包含目标字段的对象。这里核心是用project()步骤来定义你要返回的每个字段,并关联对应的顶点属性:
g.V().hasLabel("subtype").as("subtype") .out("typeof").as("type") .project("label", "schema", "name") .by(select("subtype").values("label")) .by(select("subtype").values("schema")) .by(select("type").values("name"))
为什么原来的查询不行?
你之前的select("subtype", "type").by("id")只是简单地提取了两个顶点的ID,返回的是包含subtype和type两个键的对象,无法直接组合出你要的三个字段结构。
关键部分说明:
- 先用
as("subtype")和as("type")分别标记两个关联的顶点,方便后续引用 project("label", "schema", "name")直接定义最终输出的对象结构,三个键对应你需要的字段- 每个
by()修饰器对应一个字段:by(select("subtype").values("label")):从标记为subtype的顶点中提取label属性值by(select("subtype").values("schema")):从subtype顶点中提取schema属性值(也就是你提到的properties数组中的schema值)by(select("type").values("name")):从关联的type顶点中提取name属性值
如果你的schema属性不是顶点的直接属性,而是嵌套在properties数组里的某个元素,可以调整这部分的提取逻辑,比如:
.by(select("subtype").values("properties").unfold().hasKey("schema").values("schema"))
不过根据你的描述,应该是顶点的直接属性,所以用values("schema")就足够了。
内容的提问来源于stack exchange,提问作者Michi-2142
相关产品推荐
相关产品推荐

