2017-01-30 22 views
1

My Neo4jインスタンスには、地元の大学の完全な卒業生データが入力されています。 (248K)ノード(n:卒業生)のうちの小さな%(15K)には、twitter user_nameが含まれています。私の目標は、関係データを取得するためにtwitter screenNamesをロードしてリンクするGITHUBアプリ(TWIITERからNEO4J)を使用することです。私の問題は、以下のクエリ(GITHUBアプリケーションのJavaスクリプトに含まれています)です。Cypherは、卒業生の画面名と一致しない不要なFollower/Followingノードを作成します。私は、アプリケーションから作成される関係のみを許可するクエリを記述したいと思います。 MERGEの代わりに一致する必要があります

MERGE (targetNode:Person {screen_name: {screenName}}) 
FOREACH (friend in {userList} | 
MERGE (friendNode:Person {screen_name: friend.screen_name}) 
ON CREATE SET friendNode=friend 
MERGE (targetNode)-[:FOLLOWS]->(friendNode)) 

この

は私のアイデアだった....これが明確であれば、私に教えてください - 私は同窓会に一致するようにMERGEを設定する任意の考えについて

MATCH (targetNode:Alumni {screen_name: {screenName}}) 
WHERE targetNode:Alumni.screen_name = {screen_name} 
FOREACH (friend in {userList} | 
MATCH (friendNode:Alumni {screen_name: friend.screen_name}) 
SET friendNode=friend 
MERGE (targetNode)-[:FOLLOWS]->(friendNode)) 

おかげで...

var multiline = require('multiline'); 

exports.upsertOne = multiline(function(){/* 
    MERGE (n:Person {screen_name: {screenName}}) 
    ON CREATE SET n+={userMap} 
    RETURN n 
*/}); 

/* 
* Parameters are: 
* 
* screenName - string, the handle of the person to attach followers to 
* userList - array of objects, people to merge and create relationships 
*/ 
exports.upsertManyAndFollows = multiline(function() {/* 
    MATCH (followeeNode:Alumni {screen_name: {screenName}}) 
    UNWIND {userList} as follower 
    MATCH (followerNode:Alumni {screen_name: follower.screen_name}) 
    SET followerNode=follower 
    MERGE (followerNode)-[:FOLLOWS]->(followeeNode) 
*/}); 


/* 
* Parameters are: 
* 
* screenName - string, the handle of the person to attach followers to 
* userList - array of objects, people to merge and create relationships 
*/ 
exports.upsertManyAndFriends = multiline(function() {/* 
    MATCH (targetNode:Person {screen_name: {screenName}}) 
    UNWIND {userList} as friend 
    MATCH (friendNode:Person {screen_name: friend.screen_name}) 
    SET friendNode=friend 
    MERGE (targetNode)-[:FOLLOWS]->(friendNode) 
*/}); 

/* 
* Parameters are: 
* 
* screenName - string, the handle of the person that is at the center of the graph. 
* 
*/ 
+0

あなたは遭遇している問題と、正確に助けが必要な箇所を明確にしていません。これが閉鎖される前に説明を明確にしてください。 – InverseFalcon

+0

あなたはあなたが作成したと言っていることをひとつ言います。アプリケーションの別の部分のPersonノードですが、使用しています。最後のクエリの同窓ノード。同じラベルを使用していることを確認してください。 – InverseFalcon

+0

これが役に立ったら教えてください。私はもう一度やり直してはいけません... – INNOSOLjim

答えて

0

代わりにこの方法を試してみてください。正しい画面名(クエリには{screenName}{screen_name}の両方があるので、どちらかが間違っています)を使用してください。

提供:卒業生ノードが既に作成されています。これは動作するはずです。

MATCH (targetNode:Alumni {screen_name: {screenName}}) 
UNWIND {userList} as friend 
MATCH (friendNode:Alumni {screen_name: friend.screen_name}) 
SET friendNode=friend 
MERGE (targetNode)-[:FOLLOWS]->(friendNode) 
+0

exports.upsertOne =複数行(関数(){/ * MATCH(N:同窓会{SCREEN_NAME:{スクリーンネーム}}) 集合N = {ユーザマップ} RETURN nは あなたは上記のクエリは、私の同窓生のノードが上書きされますと思いますかあなたの助けてくれてありがとう – INNOSOLjim

+0

はい、ノード 'SET n = {userMap}'でノードを設定すると、ノードのすべてのプロパティがuserMapのプロパティに置き換えられます。 – InverseFalcon

+0

それは動作していません - 私は分割構文エラーを与える c:\ Users \ jim.morgan \を使用して、マップからプロパティを追加し、上書きされないノード上の他のすべてのプロパティを保持する、 Documents \ Twitter_API_4_neo4j>ノードアプリケーション TypeError :(e.message || "").splitは関数ではありませんformatStack(c:\ Users \ jim.morgan \ Documents \ Twitter_API_4_neo4j \ node_modul es \ neo4j \ lib \ GraphDatabase.js:2:7311)の atエラー。スタック – INNOSOLjim

関連する問題