У вас сложный запрос CYPHER о сборе с использованием неоистического Голанга?

Я создаю социальную сеть, когда в комментарии включаются упоминания (например, Facebook), я отправляю комментарий json в веб-сервис:

{
  "owner": 5,                // id of user write comment
  "message": "text",
  "mentions":[
    {
      "id": 1,               // user id
      "name": "mention",     // name is shown
      "offset": 0,           // position of start of mention text
      "length": 10           // length of mention text
    },
    {
      "id": 2,               // user id
      "name": "mention",     // name is shown
      "offset": 0,           // position of start of mention text
      "length": 10           // length of mention text
    }
  ],
}

МОДЕЛЬ ДАННЫХ: (Пользователь)-[ЗАПИСЬ]->(Комментарий {сообщение})-[MENTION{имя, смещение, длина}]->(Пользователь)

В исходном коде я использую код ниже, чтобы вернуть res с идентификатором комментария

cq := neoism.CypherQuery{
        Statement:  stmt,
        Parameters: params,
        Result:     &res,
    }

Моя проблема в том, что я не знаю, как написать запрос для этого. Слишком сложно для меня.

1 ответ

Решение

Вот как сделать Cypher, не разбивая JSON в первую очередь.

WITH {json} AS map
MATCH (u:User)
WHERE id(u)=map.owner
CREATE (u)-[:WRITE]->(c:Comment{message:map.message})
FOREACH (mention IN map.mentions | 
    MATCH (u2:User) WHERE id(u2) = mention.id 
    CREATE (c)-[:MENTION{name:mention.name, length:mention.length, offset:mention.offset}]->(u2))
RETURN id(c) AS id
Другие вопросы по тегам