我正在按傳出關係的數量排序一個大型數據庫。我有一個工作Cypher查詢如下:問題利用OrderBy與Neo4jClient
optional match (n)-[r]->(m)
return n, Count(r) as c
order by c DESC limit 1;
Cypher查詢正在按預期工作。但是,當我正在調試並逐步完成Cypher - > Neo4jClient轉換時,我似乎無法找到問題的根源。
public ReturnPayload[] getByConnections()
{
var query = client.Cypher
.OptionalMatch("(p)-[r]->(m)")
.Return((p, r, m, c) => new
{
p = p.As<Person>(),
pid = (int)p.Id(),
e = r.As<RelationshipInstance<Object>>(),
m = m.As<Metadata>(),
c = r.Count()
}).OrderByDescending("c").Limit(1);
var res = query.Results;
var payload = new List<ReturnPayload>();
foreach (var el in res)
{
var t = new ReturnPayload();
t.e = el.e;
t.m = el.m;
t.pid = el.pid;
t.p = el.p;
payload.Add(t);
}
return payload.ToArray<ReturnPayload>();
}
我懷疑問題的一部分,可能是我沒有利用CollectAs<T>()
,因此它指的「1」的計數每每個人。不幸的是,我試圖使用CollectAs<T>()
和CollectAsDisctinct<T>()
,我的結果JSON體系結構只是將每個單獨的元素封裝在一個數組中,而不是將相同的元素聚合到一個數組中。
FOREACH
循環有助於從匿名類型轉換爲我的相對標準的<ReturnPayload>
,它不使用參數中的c
對象。
您的時間表示感謝,謝謝。
調試好的查詢測試:
OPTIONAL MATCH (p)-[r]->(m)
RETURN p AS p, id(p) AS pid, r AS e, m AS m, count(r) AS c
ORDER BY c DESC
LIMIT {p0}
而我的 '功能' 的Cypher查詢:
optional match (n)-[r]->(m)
return n, Count(r) as c
order by c DESC limit 1;
您可以根據https://github.com/Readify/Neo4jClient/wiki/cypher#debugging提取調試查詢文本,並與您的預期/正在運行的查詢進行比較嗎? – 2014-12-01 21:26:47
@TathamOddie:我的不好。編輯到最初的帖子的底部。 – Kyle 2014-12-01 21:36:29
@ThamhamOddie:在Cypher窗口中運行調試查詢會導致數據不正確(邏輯上沒有代碼錯誤)。所以Cypher查詢是有效的,但我的Cypher構造不是。 – Kyle 2014-12-01 21:50:13