Reputation: 3109
I would like to pass multiple sets of parameters to Neo4j query as some kind of array in such a manner:
: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
}
]
{
I have a query with parameters id, lat, lon. How can I pass each set of parameters in one query using this nodes property I set?
The kind of query I have:
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
Upvotes: 0
Views: 513
Reputation: 7478
If your goal is to iterate over your nodes, you can do that :
Create the nodes parameters
:param nodes => [ {id:193331567, lat:40.7599983215332,lon:-73.98999786376953 }, {id:107475182, lat:41.88999938964844,lon:-87.62000274658203 }]
Use this query that do an UNWIND
(ie a loop ) on your nodes
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
But in this case you need to change your query by replacing the query parameter by just query variable.
Upvotes: 2