2017-05-28 17 views
2

Neo4j-Dbに接続するためにNeo4j-Bolt-Driverを使用するNode.jsで残りのAPIを構築しようとしています。Neo4j JSONとしてのデータのシリアル化

グラフの終点と複雑さが増すにつれて、多くの長いCypherクエリを記述して維持するのがずっと難しくなっています。

私は、他のノードといくつかの関係を含むはずの移入されたJSONオブジェクトを扱うのにはいくつかの困難を抱えています。

以下は、GET/api/meエンドポイントのaのクエリです。

MATCH (user:User) WHERE user.uuid = {userId} 
OPTIONAL MATCH (user)-[:PROFILE_IMAGE]->(profileImage:Image) 
OPTIONAL MATCH (user)-[:HEADER_IMAGE]->(headerImage:Image) 
OPTIONAL MATCH (user)-[:OWNS]->(productToEmbed:Product)-[:TYPE]->(productType:ProductType) 
WITH user, COLLECT(productToEmbed{.*, type: productType.name }) AS products 
RETURN user{.*, products: products, profileImage: profileImage{.*}, headerImage: headerImage{.*}} 

ユーザーに接続されているノードのラベルが異なると、さらに悪化します。その場合、正しいと感じていない関連フィールドに正しく挿入するために、私はcypherクエリにswitch case式を記述する必要があります。

これに関するご提案はありますか?

答えて

0

あなたができることの1つは、パターンマッチングを使用してオプションのマッチを処理し、1つのステップで収集することです。わずかな構文上の改良。

MATCH (user:User) WHERE user.uuid = {userId} 
OPTIONAL MATCH (user)-[:PROFILE_IMAGE]->(profileImage:Image) 
OPTIONAL MATCH (user)-[:HEADER_IMAGE]->(headerImage:Image) 
WITH user, profileImage, headerImage, 
[(user)-[:OWNS]->(productToEmbed:Product)-[:TYPE]->(productType:ProductType) | 
productToEmbed {.*, type: productType.name}] as products 
RETURN user{.*, products, profileImage, headerImage} 

ラベルとフィールドが異なる他のノードについては、例を挙げることができますか?

関連する問題