나는 나가는 관계 수량으로 큰 데이터베이스를 정렬하고 있습니다. 다음과 같이 작동하는 Cypher 쿼리가 있습니다.Neo4jClient에서 OrderBy 활용 문제
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
루프는 익명 유형을 매개 변수 내에서 c
개체를 사용하지 않는 비교적 표준 인 <ReturnPayload>
으로 변환하는 데 도움이됩니다.
시간 내 주셔서 감사합니다. 감사합니다.
디버깅 쿼리 테스트 :
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}
그리고 내 '기능'사이퍼 쿼리
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에 따라 디버그 쿼리 텍스트를 가져와 예상/작동중인 쿼리와 비교할 수 있습니까? –
@TathamOddie : 나쁘다. 초기 게시물의 맨 아래로 편집하십시오. – Kyle
@TathamOddie : Cypher 창에서 디버깅 된 쿼리를 실행하면 잘못된 (논리적으로 코드 오류가 발생하지 않음) 데이터가 생성됩니다. 따라서 Cypher 쿼리는 유효하지만 Cypher 구문은 유효하지 않습니다. – Kyle