Cypher to Neo4JClient Distinct Collect

时间:2013-09-13 06:21:09

标签: neo4j cypher neo4jclient

我正在尝试从基节点到其根节点获取一行路径。 Cypher查询如下所示:

start n = node:node_auto_index(Name = "user1") match path = (n-[r:IS_MEMBER_OF_GROUP*]->b) return last(collect(distinct path));

但是当将其更改为Neo4JClient语法时:

var k = clientConnection.Cypher
                .Start(new { n = "node:node_auto_index(Name = 'user1')" })
                .Match("path = (n-[r:IS_MEMBER_OF_GROUP*]->b)")
                .ReturnDistinct<Node<Principles>>("last(collect(path))").Results;

收到错误:

{"Value cannot be null.\r\nParameter name: uriString"}

从那里继续:

 Neo4jClient encountered an exception while deserializing the response from the server. This is likely a bug in Neo4jClient.



Please open an issue at https://bitbucket.org/Readify/neo4jclient/issues/new



To get a reply, and track your issue, ensure you are logged in on BitBucket before submitting.



Include the full text of this exception, including this message, the stack trace, and all of the inner exception details.



Include the full type definition of Neo4jClient.Node`1[[IQS_Neo4j_TestGraph.Nodes.Principles, IQS Neo4j TestGraph, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].



Include this raw JSON, with any sensitive values replaced with non-sensitive equivalents:



{

  "columns" : [ "last(collect(path))" ],

  "data" : [ [ {

    "start" : "http://localhost:7474/db/data/node/3907",

    "nodes" : [ "http://localhost:7474/db/data/node/3907", "http://localhost:7474/db/data/node/3906", "http://localhost:7474/db/data/node/3905", "http://localhost:7474/db/data/node/3904" ],

    "length" : 3,

    "relationships" : [ "http://localhost:7474/db/data/relationship/4761", "http://localhost:7474/db/data/relationship/4762", "http://localhost:7474/db/data/relationship/4763" ],

    "end" : "http://localhost:7474/db/data/node/3904"

  } ] ]

}

如何将cypher查询转换为Neo4JClient查询?

1 个答案:

答案 0 :(得分:3)

嗯,您要归还的内容是PathsResult而不是Node<>,因此如果您将查询更改为:

 var k = clientConnection.Cypher
            .Start(new { n = "node:node_auto_index(Name = 'user1')" })
            .Match("path = (n-[r:IS_MEMBER_OF_GROUP*]->b)")
            .ReturnDistinct<PathsResult>("last(collect(path))").Results; //<-- Change here

你将得到结果,如果你特意想要这个帖子的节点,那么这将返回从我的数据库运行查询得到的结果:Getting PathsResults涵盖转换为实际节点和关系。

另一件事,(这将有助于查询执行得更好,因为neo4j可以更轻松地缓存执行计划),您可以通过执行以下操作来更改start以使其使用参数:

.Start(new { n = Node.ByIndexLookup("node_auto_index", "Name", "user1")})