Как вставить d3. js -образный граф в Neo4J - PullRequest
1 голос
/ 28 марта 2020

У меня есть файл JSON, который я использовал с d3. js для отображения принудительного ориентированного графа. Он имеет такую ​​форму:

{
    "nodes": [
        {"username": "crocodile", "id": 1},
        {"username": "TooSmart4U", "id": 2},
        {"username": "WTF12", "id": 44},
...
    ],
    "links": [
        {"source": 1, "target": 70, "action": "knows"},
        {"source": 4, "target": 20, "action": "knows"},
        {"source": 21, "target": 370, "action": "knows"},
...
    ]
}

Я попробовал следующий код (используя Cypher для выполнения запроса):

const {nodes, links} = require('./graph.json');

const statement = `
    UNWIND $nodes as user
    MERGE (u:User {username: user.username, id: user.id})
`;

const statement2 = `
    UNWIND $links as transactions
    FOREACH (t in transactions | MERGE (source:User {id: t.source}) MERGE (source)-[:KNOWS]->(target:User {id: t.target}))
`;
try {
    let result = await cypher(statement, {nodes});
    console.log(JSON.stringify(result));
    result = await cypher(statement2, {links});
    console.log(JSON.stringify(result));
    }
catch(ex) {
    console.error(ex);
}

Результат: все узлы вставлены, но отношения не правильно. Я должен что-то упустить в утверждении 2.

Вопрос: что мне не хватает, и возможно ли сделать вставку всего графа одним утверждением?

Бонус: прямо сейчас, у меня есть один тип отношения (ЗНАЕТ). Как мне сделать это переменной?

1 Ответ

1 голос
/ 30 марта 2020

Наконец-то решил, с двумя утверждениями:

const statement = `
    UNWIND $nodes as user
    CREATE (u:User {id: user.id, username: user.name})
`;
const statement2 = `
    UNWIND $links as transaction
    WITH transaction.source AS sourceId, transaction.target AS targetId
    MATCH (source:User {id: sourceId}), (target:User {id: targetId})
    CREATE (source)-[:KNOWS]->(target)
`;

Все равно хотел бы найти способ сделать это в одном утверждении или найти лучший способ загрузить график, но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...