我正在使用Neo4j .NET客户端ExecuteGetCypherResults
来运行密码。它希望所有内容都能在一个专栏中回归。我有一个简单的类JobType
,其中包含JobSpecialties
列表。在数据库中,这被建模为与专业有关系的类型。
我需要一个cypher查询,在单个列中返回结果。相关的Specialties
应该是Type
节点的子属性,我希望查询看起来像这样:
start s=node:node_auto_index(StartType='JobTypes')
match s-[:starts]->t, t-[:SubTypes]->ts
return {Id: t.Id, Name: t.Name, JobSpecialties: ts}
但这不起作用。如果这是可能的话,我无法从文档中找出答案。如果有更好的方法将结果返回给.Net客户端,我愿意接受建议。
答案 0 :(得分:0)
start s=node:node_auto_index(StartType='JobTypes')
match s-[:SubTypes]->js
return s.Id, s.Name, js;
答案 1 :(得分:0)
听起来.Net客户端需要对cypher进行一些更新。 Cypher不支持动态构建地图,尽管它已经在功能请求列表中了......
您可以使用结果创建一个数组(但从1.9.M04开始,它们必须是要合并到数组中的相同类型): http://console.neo4j.org/r/xo7voi
我实际上提交了一个拉取请求(通过反向通道,因为它打破了一些单元测试)来修复它(所以你可以在动态构建的阵列中有多种类型),但我认为是否存在一些问题合并不同类型是一个好主意。
https://github.com/wfreeman/neo4j/commit/ca457ace0df4732376833b8694e4affac4143244
更新:这将在1.9.M05 / 1.9.GA中修复。现在,您可以构建任何类型混合的数组: http://console.neo4j.org/r/vm4f83
答案 2 :(得分:0)
ExecuteGetCypherResults
确实支持多列,您只需要将我们的反序列化器置于不同的模式。这是一个通常隐藏在我们更高级API背后的实现细节,这就是为什么这不明显。
当您致电new CypherQuery
时,请传递CypherResultMode.Projection
而不是CypherResultMode.Set
。
我实在记不起为什么会这样。有时候,我需要挖掘较低的水平并尝试杀死它。拉动请求欢迎。 :)
作为首选,我们总是希望人们使用更高级别的API(但我们认识到存在一些限制)。