2016-05-28 7 views
0

これは、製品の機能が他の製品とのconnects_to関係によって強化されている場合は、この以前の質問 How to model two nodes related through a third node in neo4j?ノードにフィーチャを追加する関係をモデル化するにはどうすればよいですか?

のフォローアップで、どのようにその事実をキャプチャする必要がありますか?

例:今10により(node:L-bracket)-[connects-to]->(shelf)、その後、shelfmaxload増加した場合、誰かがmaxload=30をサポートShelfを照会場合 (shelf:Shelf {maxload:20})与え、、、私はほかに、オプションとしてL-Bracket+Shelfのこの組み合わせを取得することができるはずですL-bracketなしでmaxloadをサポートする棚に移動します。これはユースケースの1つです。

connects_toの関係で全く新しいプロパティがノードShelfに追加された場合です。私が考えているオプションは、 '提供する機能'と呼ばれる関係にプロパティを追加してから、ノードを返すときにその機能をクエリして、製品がその接続によって拡張されているかどうかを確認することです。

答えて

0

パート1:

私は L型ブラケットなしMAXLOADをサポートして棚に加えて、 オプションとしてL型ブラケット+シェルフの組み合わせを取得することができるはずです。

このユースケースは、OPTIONAL MATCHで処理されます

MATCH (shelf:Shelf {maxload:30}) 
OPTIONAL MATCH (shelf)<-[:CONNECTS_TO]-(bracket:L-Bracket) 
RETURN shelf, collect(bracket) as brackets 

これはあなたshelfsおよびそれらのそれぞれのブラケットのコレクションのリストを返すだろう - 彼らはすべてのブラケットを持っていない場合は空のコレクションを。

パート2:

connects_to関係がシェルフノードへの全く新しい プロパティを追加するときに、他のです。私が考えているオプションは「機能を提供します」と呼ばれる関係に プロパティを追加し、ノードを返すときに製品が は、その接続のいずれかの

によって強化されているかどうかを確認するために、同様 それらを照会されます

PROVIDES_FEATUREリレーションシップタイプを使用するだけで、プロパティを必要としません。パート1と同じ方法でリクエストできます。

0

もう少し一般的に、シェルフ(Lブラケットだけでなく)に接続できるものはすべて、Accessoryノードで表されていますこのようなtypeextraLoad性質、:

(:Accessory {type: 'L-Bracket', extraLoad: 10}) 

これは、異なる種類のアクセサリーを許可し、余分な負荷容量が異なるでしょう。

このモデルでは、あなたがこのように少なくとも30の負荷を保持することができ、すべてのShelf/Accessory組み合わせを見つけることができます:

MATCH (shelf:Shelf) 
OPTIONAL MATCH (shelf)<-[:CONNECTS_TO]-(x:Accessory) 
WITH shelf, COLLECT(x) AS accessories, SUM(x.extraLoad) AS extra 
WHERE shelf.maxLoad + extra >= 30 
RETURN shelf, accessories; 
は、
関連する問題