繁体   English   中英

MATCH查询中的Neo4J数组

[英]Neo4J Arrays in MATCH query

我的查询的目的是标记相似的单词。

CREATE CONSTRAINT ON (n:Word) ASSERT n.title IS UNIQUE

MATCH (n) WHERE ID(n)={id} 
MERGE (o:Word{title:{title}}) 
WITH n,o MERGE n-[r:SIMILAR{location:'{location}'}]->o 
RETURN ID(o)

n是一个现有的单词。 我想创建关系和其他单词( o )(如果尚不存在)。

此查询的问题是,它适用于一个标题,但是如果我使用带有标题的数组,则单词o的标题就是整个数组。

您能否建议我另一个执行相同的查询和/或将多个值传递给标题的方法。

我正在使用Rails上的Neography宝石,例如REST API

要在参数数组中使用单个值,可以使用FOREACH ,例如

MATCH (n)
WHERE ID (n) = {id}
FOREACH (t IN {title} |
    MERGE (o:Word {title:t})
    MERGE n-[:SIMILAR]->o
)

如果您还希望将location作为参数传递(它实际上是当前查询中的字符串文字),以便对参数数组中的每个title, location对进行n合并操作,则可以尝试

FOREACH (map IN {maps} |
    MERGE (o:Word {title:map.title})
    MERGE n-[:SIMILAR {location:map.location}]->o
)

参数看起来像

{
    "maps": [
        {
            "title":"neography",
            "location":"1.."
        },{
            "title":"coreography",
            "location":"3.."
        }
    ]
}

其他建议:

  1. 通过参数中的内部ID查找节点通常不是很好。 在某些情况下,将查询链接起来可能会很好,但是在大多数情况下,标签索引查找会更好: MATCH (n:Word {title:"geography"})
  2. 如果您不使用交易密码端点,请尝试一下。 然后,您可以在一个事务中的每个调用中使用一个或多个查询进行一个或多个调用。 性能提高了,您可能发现不需要发送更复杂的参数对象,但是可以发送许多简单的查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM