У меня есть файл 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.
Вопрос: что мне не хватает, и возможно ли сделать вставку всего графа одним утверждением?
Бонус: прямо сейчас, у меня есть один тип отношения (ЗНАЕТ). Как мне сделать это переменной?