# Команды для работы с бд neo4j

## Создание записи
```
CREATE (user:User {<<Ключ>>:<<Значение>>,})
```
Получение всех пользователей
----------------------------
```
MATCH (user:User)
```
Получение одного или несколько пользователей по какому либо значению
--------------------------------------------------------------------
```
MATCH (user:User {<<Ключ>>: <<Значение>>})
MATCH (user_parent:User {<<Ключ>>: <<Значение>>})
MATCH (user_children:User {<<Ключ>>: <<Значение>>})
```
Cоздание связи между пользователями
-----------------------------------
```
CREATE (user_children)-[:ИМЯ СВЯЗИ(Указывается капсом)]->(user_parent) 
```
Получение детей у пользователя
------------------------------
```
MATCH p=(user:User {Ключ:'Значение'})<-[:ИМЯ СВЯЗИ*]-(:User) RETURN p
```
Получение родителей у пользователя
----------------------------------
```
MATCH p=(user:User {Ключ:'Значение'})-[:ИМЯ СВЯЗИ*]->(:User) RETURN p 
```
Выгрузка из файла
-----------------

LOAD CSV WITH HEADERS FROM "ТУТ ПУТЬ К ФАЙЛУ(Если он внутри neo4j то указывается через file:// можно брать с сервера через http/https" AS row MERGE (user:User {{Ключ: row.<<значение из файла>>}})

`MERGE` работает как `get_or_create`(Тоесть если он нашел в данном случае пользователя то будет использовать его, если не нашел он его создаст)  
В случае выгрузки из файла, не получилось найти старые объекты. Создавал новые

Изменение какого-либо поля у пользователя(ей) сохраняет сам
-----------------------------------------------------------
```
MATCH (user:User)
SET user.<<имя ключа>> = 10 + 10 
```
Для того, что бы проверить почему тормозит запрос и с целью оптимизации, перед запросом указать `PROFILE` внутри neo4j  
Детально опишет запрос.
```
CREATE INDEX ON :<Имя>(<Ключ>) <-- Создает индекс в бд
CALL db.indexes <-- Выведет индексы которые созданы
```