2017-01-11 3 views
2

新しいCypher 3.1のhead()関数を使用していて、OPTIONAL MATCHコマンドの後にRETURN文で使用すると、異常な(間違った)動作が見られます。オプションのマッチで一致しないラベルがhead()パースペクティブからすでに収集されたデータに悪影響を及ぼし、RETURNステートメントの残りの部分について期待どおりに動作する値のように見えます。私たちが何をやっているのか、これがNeo4jエンジンの予期せぬ結果ですか?ここで新しいCypher 3.1のhead()関数の問題

MATCH (productLine:ProductLine)-[:CHILD]->(product:Product)-[:CHILD]->(application:Application)-[:MATCHES]->(:Rule {name: 'Tier-0 Application'}) 
WITH productLine, 
    application 
OPTIONAL MATCH (application)-[mr:MATCHES]->(:Rule {name: 'Multiple Regions'}) 
WITH application, 
    mr, 
    productLine 
RETURN 
    productLine.name AS ProductLine, 
    head([(productLine)-[:PRODUCT_MANAGER]->(person:Person) | person.name]) AS ProductLineManager, 
    mr.numServers, 
    application.id AS AppId 

は、私たちが見たものです。これはオプションMATCHによって生成された行があるパターンの理解に関連するバグ、ない頭()関数で、あるよう

ProductLine ProductLineManager mr.numServers AppId 
PL1 null null IN000041 
PL2 LAST,FIRST 6 AP010024 
PL3 LAST,FIRST 6 AP107752 
PL4 LAST,FIRST 11 AP106560 
PL5 null null AP012190 
+0

質問のいくつか:1. 3.0で試しましたか? ['head()'](https://neo4j.com/docs/developer-manual/3.0/cypher/#functions-head)関数も3.0で提供されました。 2.サンプルデータセットを提供して、クエリを少し簡略化していただけますか? –

答えて

1

が見えます。

ムービーグラフをベースにしてバグを再現できました。

Neo4j号トラッカーにbug for thisを作成し、例を示します。

回避策として、DISTINCTを最後のWITHまたはRETURNのどちらかに使用すると、期待される結果が返される可能性があります。