2017-08-02 3 views
2

I次のクエリがあります。特にNeo4j INがすべての結果に対してfalseを返すのはなぜですか?

MATCH (a)-[r1]-(b) WITH a, b, 
COLLECT(b.primaryId) AS bAll, r1 
MATCH (b)-[r2]-(c) 
RETURN c.primaryId IN bAll 

、AはBとCに関し、BおよびCはに関連する場合も、深さ1つの接続、すなわちある深さ2の接続を何であるか、私はここにした後だしお互い。

これは戻り値がfalseです。しかし、私がc.primaryId, bAllを返すと、明らかに値が重なることがわかります。私は間違って何をしていますか?

EDIT:サンプル応答 "のグループ化キー" を超えるCOLLECT集約などの

╒═══════╤═════════╕ 
│"id(c)"│"bAll" │ 
╞═══════╪═════════╡ 
│1077598│[902604] │ 
├───────┼─────────┤ 
│195687 │[902604] │ 
├───────┼─────────┤ 
│461579 │[902604] │ 
├───────┼─────────┤ 
│1084085│[902604] │ 
├───────┼─────────┤ 
│1295819│[902604] │ 
├───────┼─────────┤ 
│316503 │[902604] │ 
├───────┼─────────┤ 
│1505256│[902604] │ 
├───────┼─────────┤ 
│1494600│[902604] │ 
├───────┼─────────┤ 
│708871 │[902604] │ 
├───────┼─────────┤ 
│319671 │[902604] │ 
├───────┼─────────┤ 
│957553 │[902604] │ 
├───────┼─────────┤ 
│394705 │[902604] │ 
├───────┼─────────┤ 
│379116 │[902604] │ 
├───────┼─────────┤ 
│1017683│[902604] │ 
├───────┼─────────┤ 
│330049 │[902604] │ 
├───────┼─────────┤ 
│567549 │[902604] │ 
├───────┼─────────┤ 
│344636 │[902604] │ 
├───────┼─────────┤ 
│1102414│[902604] │ 
├───────┼─────────┤ 
│598267 │[540185] │ 
├───────┼─────────┤ 
│829725 │[540185] │ 
├───────┼─────────┤ 
│1010574│[540185] │ 
├───────┼─────────┤ 
│1437190│[540185] │ 
├───────┼─────────┤ 
│1094878│[540185] │ 
├───────┼─────────┤ 
│19008 │[540185] │ 
├───────┼─────────┤ 
│1084085│[540185] │ 
├───────┼─────────┤ 
│366066 │[282808] │ 
├───────┼─────────┤ 
│1443101│[282808] │ 
├───────┼─────────┤ 
│433507 │[282808] │ 
├───────┼─────────┤ 
│1514110│[282808] │ 
├───────┼─────────┤ 
│1456009│[282808] │ 
├───────┼─────────┤ 
│146294 │[282808] │ 
├───────┼─────────┤ 
│29812 │[282808] │ 
├───────┼─────────┤ 
│889369 │[282808] │ 
├───────┼─────────┤ 
│221085 │[282808] │ 
├───────┼─────────┤ 
│1084085│[282808] │ 
├───────┼─────────┤ 
│17122 │[282808] │ 
├───────┼─────────┤ 
│79762 │[282808] │ 
├───────┼─────────┤ 
│887829 │[282808] │ 
├───────┼─────────┤ 
│375676 │[282808] │ 
├───────┼─────────┤ 
│1071899│[282808] │ 
├───────┼─────────┤ 
│1632753│[282808] │ 
├───────┼─────────┤ 
│1084085│[1748723]│ 
├───────┼─────────┤ 
│1071899│[1748723]│ 
├───────┼─────────┤ 
│710990 │[1748723]│ 
├───────┼─────────┤ 
│402609 │[269346] │ 
├───────┼─────────┤ 
│1711007│[269346] │ 
├───────┼─────────┤ 
│1408844│[269346] │ 
├───────┼─────────┤ 
│327082 │[269346] │ 
├───────┼─────────┤ 
│1575549│[269346] │ 
├───────┼─────────┤ 
│165601 │[269346] │ 
├───────┼─────────┤ 
│886370 │[269346] │ 
├───────┼─────────┤ 
│560737 │[269346] │ 
├───────┼─────────┤ 
│1084085│[269346] │ 
├───────┼─────────┤ 
│935787 │[269346] │ 
├───────┼─────────┤ 
│1448889│[269346] │ 
├───────┼─────────┤ 
│644901 │[269346] │ 
├───────┼─────────┤ 
│1415535│[269346] │ 
├───────┼─────────┤ 
│1713087│[269346] │ 
├───────┼─────────┤ 
│1084085│[122631] │ 
├───────┼─────────┤ 
│1384573│[122631] │ 
├───────┼─────────┤ 
│268383 │[1071899]│ 
├───────┼─────────┤ 
│1084085│[1071899]│ 
├───────┼─────────┤ 
│1748723│[1071899]│ 
├───────┼─────────┤ 
│282808 │[1071899]│ 
└───────┴─────────┘ 
+1

サンプルデータセットを投稿できますか? –

+0

'RETURN c.primaryId、bAll'のサンプルレスポンスが含まれています – mike

+1

どのような結果を得たいのかはっきりしていません。ノードとリレーションシップの短い例と、望ましい結果を表示します。 –

答えて

1

Aggregation機能を含みます。クエリでは、WITH a, b, COLLECT(b.primaryId) AS bAll, r1a,b、およびr1の組み合わせをグループ化キーとして使用しているため、bAllの集計には常にprimaryIdの値(同じグループのbノード)のみが含まれます。

以下は、あなたが望むものに近いかもしれません。各ノードaに対して、深さ1ノードでもあるすべての深さ2ノードの値primaryIdを返します。 (問い合わせは、あなたのノードがユニークprimaryIdの値を持っていることを単純化仮定します。)

MATCH (a)--(b) 
WITH a, COLLECT(b) AS bs 
UNWIND bs AS b 
MATCH (b)--(c) 
WHERE c IN bs 
RETURN a, COLLECT(c.primaryId) AS cIds; 

[UPDATE]

あなたはまた、すべてのr1関係を返すようにしたい場合は、あなたがこれを行うことができます:

MATCH (a)-[r1]-(b) 
WITH a, COLLECT(r1) AS r1s, COLLECT(b) AS bs 
UNWIND bs AS b 
MATCH (b)--(c) 
WHERE c IN bs 
RETURN a, r1s, COLLECT(c.primaryId) AS cIds; 
+0

私はこれが間違いなく正しく働いていることを知っています。しかし、クエリの終わりに 'r1'を返すことを前提としているとします。このようにすれば、' r1'が 'WITH'節以降に定義されていないことがわかります。 – mike

+0

私の更新された回答を参照してください。 – cybersam

+0

私は私の答えにいくつかの問題を修正しました。 – cybersam

関連する問題