В этом примере показано, как добавить группу коллег, хранящуюся как направленный график, к группе друзей в социальной области, хранящейся как узлы и связи в базе данных Neo4j ®. В примере показано, как запросить график в базе данных с помощью языка запросов Cypher ®, который позволяет создавать пользовательские запросы.
Дополнительные сведения об интерфейсе MATLAB ® для Neo4j см. в разделе Рабочий процесс базы данных Graph для интерфейсов базы данных Neo4j.
Предположим, что данные графика хранятся в базе данных Neo4j, представляющей социальное соседство. Эта база данных имеет семь узлов и восемь взаимосвязей. Каждый узел имеет только один уникальный ключ свойства name со значением в диапазоне от User1 через User7. Каждая связь имеет тип knows.
На локальном компьютере размещена база данных Neo4j с номером порта 7474Имя пользователя neo4j, и пароль matlab. На этом рисунке представлено визуальное представление данных в базе данных.
Создание объекта Neo4j соединения neo4jconn с использованием URL-адреса http://localhost:7474/db/dataИмя пользователя neo4j, и пароль matlab.
url = 'http://localhost:7474/db/data'; username = 'neo4j'; password = 'matlab'; neo4jconn = neo4j(url,username,password);
Проверьте Message свойство объекта подключения Neo4j neo4jconn. Бланк Message указывает на успешное подключение.
neo4jconn.Message
ans =
[]
Определите группу из четырех коллег, создав направленный график в MATLAB. Создать digraph объект, имеющий четыре узла и три ребра.
s = [1 1 1]; t = [2 3 4]; G = digraph(s,t);
Укажите имена узлов.
G.Nodes.name = {'User8';'User9';'User10';'User11'};Постройте график для просмотра узлов и кромок.
plot(G)

Храните направленный граф как граф Neo4j. Укажите две метки для всех узлов в результирующем графике Neo4j с помощью GlobalNodeLabel аргумент пары имя-значение. Также укажите тип works with для всех взаимосвязей в результирующем графике Neo4j с помощью GlobalRelationType аргумент пары имя-значение.
graphinfo = storeDigraph(neo4jconn,G, ... 'GlobalNodeLabel',{'Colleague','Person'}, ... 'GlobalRelationType','works with');
Отображение меток первого узла на графике.
graphinfo.Nodes.NodeLabels{1}ans = 2×1 cell array
{'Person' }
{'Colleague'}
Результатом является клеточный массив символьных векторов. Каждый символьный вектор является меткой узла для первого узла.
Отображение взаимосвязей на графике.
graphinfo.Relations
ans=3×5 table
StartNodeID RelationType EndNodeID RelationData RelationObject
___________ ____________ _________ ____________ _______________________________________
20 31 'works with' 8 [1×1 struct] [1x1 database.neo4j.http.Neo4jRelation]
23 31 'works with' 32 [1×1 struct] [1x1 database.neo4j.http.Neo4jRelation]
24 31 'works with' 33 [1×1 struct] [1x1 database.neo4j.http.Neo4jRelation]
Relations - таблица, содержащая следующие переменные:
Идентификатор начального узла
Тип отношения
Идентификатор конечного узла
Данные о взаимоотношениях
Neo4jRelation объект
Поиск узлов с меткой узла Person и ключ свойства name задайте значения User7 и User8 с помощью подключения к базе данных Neo4j.
nlabel = 'Person'; user7 = searchNode(neo4jconn,nlabel,'PropertyKey','name', ... 'PropertyValue','User7'); user8 = searchNode(neo4jconn,nlabel,'PropertyKey','name', ... 'PropertyValue','User8');
Добавление связи между узлами User7 и User8 для подключения группы коллег к группе друзей.
relationtype = 'knows';
relation = createRelation(neo4jconn,user7,user8,relationtype);Отображение результирующего графика в базе данных Neo4j.

Создание запроса Cypher для поиска людей, работающих с людьми User7 знает. Отображение имен этих людей.
query = ['MATCH (:Person {name: "User7"})-[:knows]->(:Person)-[:`works with`]' ... '->(potentialContact:Person) RETURN potentialContact.name']; results = executeCypher(neo4jconn,query)
results=3×1 table
potentialContact_name
_____________________
'User11'
'User10'
'User9'
User9, User10, и User11 все работают с кем-то, кто User7 знает. User7 знает User8, который работает с User9, User10, и User11.
close(neo4jconn)