2017-12-20 35 views
0

こんにちは私はソーシャルネットワークを作りたいと思います。現在、私は友人の友人を表示しようとしているので、友人にその人を推薦することができます。私はNode.jsサーバーでNeo4jクエリを実装しています。問題は、現在のCypher構文で構文エラーが発生することです。私は誰かが質問を見て何が間違っているか教えてくれることを願っています。Cypherを使ってNeo4jの友人だけを取得する方法

サイファー構文:

MATCH (n:User{mongoId: {idNeo}}) 
MATCH n-[:FRIENDS_WITH*2]-m 
WHERE NOT n-[:FRIENDS_WITH]-m 
RETURN m 

ルート全体:

routes.get('/users/friendsoffriends/:id', function(req, res) { 
    //res.contentType('application/json'); 
    var ids = []; 
    const id = req.param('id'); 

    session 
    .run("MATCH (n:User{mongoId: {idNeo}}) MATCH n-[:FRIENDS_WITH*2]-m WHERE NOT n-[:FRIENDS_WITH]-m RETURN m", {idNeo: id}) 
    .then(function(result) { 
     result.records.forEach(function(record){ 
     ids.push(record._fields[0].properties.mongoUserId); 
     }); 
     console.log(ids); 
     return ids; 
    }) 
    .then((ids)=>{ 
     User.find({_id: { $in: ids}}) 
      .then((blogPost) => { 
      res.status(200).json(blogPost); 
     }) 
    }) 
    .catch((error) => { 
     res.status(400).json(error); 
    }) 
}); 

答えて

0

あなたのサイファークエリは、グラフのパターン内のノードの周りに括弧が欠落しています。試してみてください:

MATCH (n:User{mongoId: {idNeo}}) 
MATCH (n)-[:FRIENDS_WITH*2]-(m) 
WHERE NOT (n)-[:FRIENDS_WITH]-(m) 
RETURN m 
+0

ありがとう、愚かな間違い。結果にnがどのように除外できるか知っていますか?私が今、Aさんの友達の友達を知りたいなら、Aさん自身も表示されます。 – Mike

+0

複数のノードがありますか?同じ2つのノード間にFRIENDS_WITH関係がありますか?これは、* 2拡張が開始ノードに戻るための私が知っている唯一の方法です。それはモデリングの問題かもしれないようですね?それ以外の場合は、これがグラフに合っている場合は、WHERE節に 'AND n <> m'を追加します。 – InverseFalcon

+0

下記のリンクを参照してください https://stackoverflow.com/questions/19032147/cypher-travel-in-several-crossed-chained-list 私は以下のクエリを実行しようとしましたが、私にとって運がない、誰かが私を助けることができます Match u:Student - [:FRIEND * 0..1] - >友人:学生 ここでu.id = 84 友達と 友人と[rel:TIMELINE *] - >アクティビティ ここですべてのどこr.idUser = id(友人) 返信friend.me.fullName – Satish

関連する問題