首页 / JAVA / java-Neo4J IN运算符
java-Neo4J IN运算符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Neo4J IN运算符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4445字,纯文字阅读大概需要7分钟。
内容图文
![java-Neo4J IN运算符](/upload/InfoBanner/zyjiaocheng/676/403493fc34c54d4bb8f4e42662af066f.jpg)
我无法使用嵌入式Java API在Cypher查询中使用IN运算符.似乎您无法将IN运算符与在start子句中检索到的实体以外的标识符一起使用.
例如,这是我的查询:
start n=node(someLongNodeId)
match n--m
where m.gnid? IN [\"someStringId\",\"otherStringId\"]
return m
在对n的属性进行过滤时,我可以使用IN运算符,但是当我执行上述查询并尝试对从columnAs(“ m”)返回的迭代器上调用hasNext()时,它会失败并出现以下异常:
Exception in thread "main" java.lang.RuntimeException
at org.neo4j.cypher.internal.pipes.matching.MiniMap.newWith(ExpanderStep.scala:172)
at org.neo4j.cypher.internal.pipes.matching.MiniMap.newWith(ExpanderStep.scala:155)
at org.neo4j.cypher.internal.commands.InCollection$$anonfun$isMatch$1.apply(InCollection.scala:39)
at org.neo4j.cypher.internal.commands.InCollection$$anonfun$isMatch$1.apply(InCollection.scala:38)
at scala.collection.LinearSeqOptimized$class.exists(LinearSeqOptimized.scala:79)
at scala.collection.immutable.List.exists(List.scala:45)
at org.neo4j.cypher.internal.commands.AnyInCollection$$anonfun$seqMethod$2.apply(InCollection.scala:71)
at org.neo4j.cypher.internal.commands.AnyInCollection$$anonfun$seqMethod$2.apply(InCollection.scala:71)
at org.neo4j.cypher.internal.commands.InCollection.isMatch(InCollection.scala:38)
at org.neo4j.cypher.internal.commands.And.isMatch(Predicate.scala:83)
at org.neo4j.cypher.internal.pipes.matching.FilteringIterable$FilteringIterator.spoolToNextInLine(FilteringIterable.scala:55)
at org.neo4j.cypher.internal.pipes.matching.FilteringIterable$FilteringIterator.<init>(FilteringIterable.scala:34)
at org.neo4j.cypher.internal.pipes.matching.FilteringIterable.iterator(FilteringIterable.scala:72)
at org.neo4j.cypher.internal.pipes.matching.FilteringIterable.iterator(FilteringIterable.scala:27)
at scala.collection.JavaConversions$IterableWrapperTrait$class.iterator(JavaConversions.scala:557)
at scala.collection.JavaConversions$IterableWrapper.iterator(JavaConversions.scala:583)
at scala.collection.JavaConversions$IterableWrapper.iterator(JavaConversions.scala:583)
at org.neo4j.kernel.impl.traversal.TraversalBranchWithState.expandRelationshipsWithoutChecks(TraversalBranchWithState.java:70)
at org.neo4j.kernel.impl.traversal.TraversalBranchImpl.expandRelationships(TraversalBranchImpl.java:104)
at org.neo4j.kernel.impl.traversal.StartNodeTraversalBranch.next(StartNodeTraversalBranch.java:47)
at org.neo4j.kernel.impl.traversal.AsOneStartBranch.next(AsOneStartBranch.java:100)
at org.neo4j.kernel.PreorderDepthFirstSelector.next(PreorderDepthFirstSelector.java:52)
at org.neo4j.kernel.impl.traversal.TraverserIterator.fetchNextOrNull(TraverserIterator.java:65)
at org.neo4j.kernel.impl.traversal.TraverserIterator.fetchNextOrNull(TraverserIterator.java:34)
at org.neo4j.helpers.collection.PrefetchingIterator.hasNext(PrefetchingIterator.java:55)
at scala.collection.JavaConversions$JIteratorWrapper.hasNext(JavaConversions.scala:574)
at scala.collection.Iterator$$anon$21.hasNext(Iterator.scala:371)
at scala.collection.Iterator$$anon$21.hasNext(Iterator.scala:371)
at scala.collection.Iterator$$anon$22.hasNext(Iterator.scala:388)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334)
at org.neo4j.cypher.PipeExecutionResult.hasNext(PipeExecutionResult.scala:138)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334)
at scala.collection.Iterator$$anon$19.hasNext(Iterator.scala:334)
at scala.collection.JavaConversions$IteratorWrapper.hasNext(JavaConversions.scala:562)
at com.awesomecompany.data.neo.NeoTestDriver.performBidirectionalQuery(NeoTestDriver.java:122)
at com.awesomecompany.data.neo.NeoTestDriver.main(NeoTestDriver.java:44)
我是否可以在示例中使用n以外的其他运算符,这是我的正确假设吗?这是错误,还是设计使然?
解决方法:
我想回答自己的问题,以防其他人遇到类似的问题.参考上面的示例,我想谈谈几件事:
在neo4j Google网上论坛中每this discussion
>我在WHERE子句中添加了HAS()函数
>我还更改了数组值,以使用单引号(‘)代替以前的双引号
因此,我的新示例查询如下所示:
start n=node(someLongNodeId)
match n--m
where HAS(m.gnid) AND m.gnid IN ['someStringId','otherStringId']
return m
这按预期工作.
进行上述修改后,我将查询转换为使用参数(如果JDBC教给我了任何知识,则它是执行此类查询的正确方法).该查询如下所示:
start n=node({nodeId})
match n--m
where HAS(m.gnid) AND m.gnid IN {otherIds}
return m
这也可以正常工作.
目前,IN运算符的文档还不够完善,这是可以理解的,因为它对neo4j项目而言还很陌生,但是我想确保在其他任何人遇到类似麻烦的情况下,都能得到解答.
内容总结
以上是互联网集市为您收集整理的java-Neo4J IN运算符全部内容,希望文章能够帮你解决java-Neo4J IN运算符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。