Передать набор параметров в запрос Neo4j - PullRequest
0 голосов
/ 06 июля 2018

Я бы хотел передать несколько наборов параметров в запрос Neo4j как некоторый массив таким образом:

    :params
     "nodes": [
     {
     "id": 193331567,
     "lat": 40.7599983215332,
     "lon": -73.98999786376953
     },
     {
     "id": 107475182,
     "lat": 41.88999938964844,
     "lon": -87.62000274658203
     },
     {
     "id": 66276172,
     "lat": 40.72999954223633,
     "lon": -74.01000213623047
     },
     {
     "id": 154076092,
     "lat": 37.779998779296875,
     "lon": -122.41999816894531
     }
     ]
{ 

У меня есть запрос с параметрами id, lat, lon. Как я могу передать каждый набор параметров в одном запросе, используя это свойство узлов, которое я установил?

Тип запроса, который у меня есть:

MATCH (m:Member)-[mtg_r:MT_TO_MEMBER]->(mt:MemberTopics)-[mtt_r:MT_TO_TOPIC]->(t:Topic),
(t1:Topic)-[tt_r:GT_TO_TOPIC]->(gt:GroupTopics)-[tg_r:GT_TO_GROUP]->(g:Group)-[h_r:HAS]->
(e:Event)-[a_r:AT]->(v:Venue) WHERE mt.topic_id = gt.topic_id AND distance(point({ longitude: 
{lon}, latitude: {lat}}),point({ longitude: v.lon, latitude: v.lat })) < 4000 AND 
mt.member_id = {id} RETURN distinct {id} as member_id, {lat} as member_lat, 
{lon} as member_lon, g.group_name as group_name, e.event_name as event_name, v.venue_name 
as venue_name, v.lat as venue_lat, v.lon as venue_lon, distance(point({ longitude: {lon}, 
latitude: {lat}}),point({ longitude: v.lon, latitude: v.lat })) as distance

1 Ответ

0 голосов
/ 06 июля 2018

Если ваша цель состоит в том, чтобы перебрать ваши узлы, вы можете сделать это:

Создание параметров узлов

:param nodes => [ {id:193331567, lat:40.7599983215332,lon:-73.98999786376953 }, {id:107475182, lat:41.88999938964844,lon:-87.62000274658203 }]

Используйте этот запрос, чтобы выполнить UNWIND (то есть цикл) для ваших узлов

 WITH $nodes as nodes
    UNWIND nodes AS node
      with node.id AS id, node.lon AS lon, node.lat AS lat
      MATCH 
        (m:Member)-[mtg_r:MT_TO_MEMBER]->(mt:MemberTopics)-[mtt_r:MT_TO_TOPIC]->(t:Topic),  
        (t1:Topic)-[tt_r:GT_TO_TOPIC]->(gt:GroupTopics)-[tg_r:GT_TO_GROUP]->(g:Group)-[h_r:HAS]->
        (e:Event)-[a_r:AT]->(v:Venue) 
      WHERE mt.topic_id = gt.topic_id AND 
            distance(point({ longitude: lon, latitude: {lat}}),point({ longitude: v.lon, latitude: v.lat })) < 4000 AND 
            mt.member_id = id 
      RETURN 
        distinct id as member_id, 
        {lat} as member_lat, 
        lon as member_lon, 
        g.group_name as group_name, 
        e.event_name as event_name, 
        v.venue_name as venue_name, 
        v.lat as venue_lat, 
        v.lon as venue_lon, 
        distance(point({ longitude: lon, latitude: {lat}}),
        point({ longitude: v.lon, latitude: v.lat })) as distance

Но в этом случае вам нужно изменить запрос, заменив параметр запроса просто переменной запроса.

...