Как автоматизировать именование узлов в neo4j с помощью цикла?
У меня есть список строк и я хочу импортировать все элементы в базу данных графа. Говоря об импорте, я имею в виду, я хочу установить строку как свойство узла. Размер списка будет огромным. Так есть ли способ автоматизации именования узлов? Поскольку традиционным способом вы должны создавать узлы, вызывая graphDb.createNode() 100 раз, если размер списка равен 100.
1 ответ
Вы можете передать свой список строк в качестве параметра в запрос Cypher. Вот образец фрагмента:
List<String> names = ...;
try ( Transaction tx = graphDb.beginTx() )
{
String queryString = "UNWIND {names} AS name CREATE (n:User {name: name})";
Map<String, Object> parameters = new HashMap<>();
parameters.put( "names", names );
graphDb.execute( queryString, parameters );
tx.success();
}
Примечание. Если список строк "слишком длинный", описанный выше подход не будет работать, так как серверу может не хватить памяти, пытаясь выполнить всю эту обработку за одну транзакцию. В этом случае вы можете использовать процедуру APOC, такую как apoc.periodic.iterate, для создания узлов меньшими партиями.