2017-01-30 5 views
1

Экземпляр My Neo4j заполнен полным набором данных для выпускников из местного университета. Небольшой% (15K) узлов (248K) (n: выпускников) включает имя пользователя twitter. Моя цель - использовать приложение GITHUB (TWIITER to NEO4J), которое загружает и связывает twitter screenNames, чтобы получить данные отношений. Моя проблема заключается в том, что запрос ниже (который содержится в java-скрипте из приложения GITHUB). Cypher создает нежелательные следящие/следующие узлы, которые не совпадают с именем alumni screen_name. Я хотел бы написать запрос, который позволяет создавать отношения только из приложения. Дайте мне знать, если это понятнее ....Необходимость MATCH вместо 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 на матч Alumni

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 (п: Alumni {screen_name: {ScreenName}}) п = {userMap} ВОЗВРАТ п Как вы думаете, приведенный выше запрос будет перезаписан мои Alumni Узлов текущее свойство? Извините за спам !!! Спасибо за вашу помощь – INNOSOLjim

+0

Да, установка узла с картой 'SET n = {userMap}' заменяет все свойства узла свойствами в userMap. Если вы хотите только перезаписать и добавьте свойства с карты и сохраните все другие свойства на узле, которые не перезаписаны, используйте оператор '+ ='. – InverseFalcon

+0

Это не работает - Дает мне синтаксическую ошибку разделения c: \ Users \ jim.morgan \ Документы \ Twitter_API_4_neo4j> приложение узла TypeError: (e.message || "") .split не является функцией в форматеStack (c: \ Users \ jim.morgan \ Documents \ Twitter_API_4_neo4j \ node_modul es \ neo4j \ lib \ GraphDatabase.js: 2: 7311) at Ошибка.stack – INNOSOLjim