2017-04-19 9 views
0

個人に関するデータでいっぱいになったグラフを想像してみてください。各ノードには「年齢」というプロパティがあります。今、私は "年齢"の異なる値が存在するので、0から90までの各年齢のノードが1つある場合、ノード数を含むサンプルを返したいと思います。Neo4j/Cypher - 異なるプロパティ値でノードを返す

どうすれば実現できますかサイファーを通して?私は実際にこれだけ対応するノードなしに、すべての個別のプロパティ値を取得し、ランダムな要素の一定量、「年齢」のための個別の値を持つそれぞれを返してやりたい

は十分ではありません。

+0

これは、サポートする必要があるか、1回限りのクエリですか?この種のクエリの高速実行をより良くサポートするために、モデルの変更を検討することもできます。 – InverseFalcon

+0

データには年齢が固定されているか、生年月日にバインドされているため、時間が経過すると年齢が上がります。 – InverseFalcon

+0

これは一般的な用途であり、データは静的です。私はデータベースをモデル化していないので、データ編成を変更することになります。 – rinderwahn

答えて

1

これはあなたのために働くかもしれない:

MATCH (p:Person) 
RETURN p.age AS age, COLLECT(p)[TOINT(rand() * COUNT(p))] AS person; 

問合せは、DB内のそれぞれ異なった年齢を持っているすべての人々を収集し、各年齢のためのランダムなものを選びます。

0

あなたが持っているか、グラフを変更する能力を獲得することができた場合は、に個人の年齢を抽出することもできます。(年齢は、あなたのデータに静的であるためにのみ動作)年齢・ノード。

APOC手順はここに助けることができcategorization refactoring procedureています。各年齢の人を取得する

そのように、あなただけのすべてに一致:年齢・ノード、およびget one connected node for each of themを。限りランダム各年齢層のための選択を行うよう

EDIT

、我々はランダムな指標を収集し、グラブのcybersamのアプローチを使用することができます。 APOC手順に

、我々はまた、コレクションからランダムにアイテムをつかむためにapoc.coll.randomItem()を使用するオプションがあります。基本的には同じことをボンネットの下でやっています。次のようになります。

MATCH (age:Age)<-[:HasAge]-(p:Person) 
RETURN age.age as age, apoc.coll.randomItem(collect(p)) as randomPerson 
あなたが「特定の必要があると述べた

フルクエリ(人・ノード:年齢・ノードを(との関係で「年齢」プロパティ)を使用すると、個別の持っていると仮定した場合) 「ランダム要素の量」を別々の年齢に設定することで、上記のクエリを変更して年齢別にランダムな人物を収集し、apoc.coll.randomItems()を使用して必要なランダムなエントリを多数取得することができます。

MATCH (age:Age)<-[:HasAge]-(p:Person) 
WITH age, apoc.coll.randomItem(collect(p)) as randomPerson 
RETURN apoc.coll.randomItems(collect(randomPerson), {numberOfItemsDesired}) as randomPeople 
+0

素晴らしい提案。しかし、それはランダムな結果を保証するものではありません。 – cybersam

+0

真。年齢ごとにランダム選択を含むように私の答えを更新しました(それぞれの人は異なる年齢を持ちます)。しかし、多くの人がランダムに選択されている必要があります。 – InverseFalcon

関連する問題