1

我正在使用 Neo4j .NET 客户端ExecuteGetCypherResults来运行密码。它希望所有内容都在一个列中返回。我有一个简单的类JobType,其中包含一个列表JobSpecialties。在数据库中,这被建模为与专业有关系的类型。

在此处输入图像描述

我需要一个密码查询,它在单个列中返回结果。相关的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 客户端,我愿意接受建议。

4

3 回答 3

0
start s=node:node_auto_index(StartType='JobTypes')
match s-[:SubTypes]->js
return s.Id, s.Name,  js;
于 2013-02-15T09:10:15.423 回答
0

ExecuteGetCypherResults确实支持多列,您只需要将我们的反序列化器踢到不同的模式。这是一个通常隐藏在我们更高级别 API 后面的实现细节,这就是为什么这并不明显。

当你打电话时new CypherQuery,通过CypherResultMode.Projection而不是CypherResultMode.Set

我真的不记得为什么我们有这个。有时,我需要挖掘较低的级别并尝试杀死它。欢迎拉取请求。:)

不过,作为一种偏好,我们总是更喜欢人们使用更高级别的 API(但我们认识到存在一些限制)。

于 2013-02-20T17:26:59.787 回答
0

听起来 .Net 客户端需要对密码进行一些更新。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

于 2013-02-15T17:39:49.543 回答