Neo4j填坑记录-Neo4jClient建立节点、建立关系相关
最近一个项目需要用到知识图谱,选用了neo4j图数据库,在这过程中遇到几个坑,记录一下
1.无法登录,疯狂提示“WebSocket connection failure. Due to security constraints in your web browser”
我的测试环境是在docker中运行的,google的办法都是改配置文件中的监听地址什么的,最后也没能找到解决办法。阴差阳错换回3.5.16版本就好了。这个问题我也不确定问题根源,并不是说4.0版本就一定会有这个问题。
2.neo4jClient建立节点,建立关系
种种原因,写数据到neo4j的程序是c#写的。比较常见的驱动有两个,一个是官方的neo4j-dotnet-driver,另一个是第三方的Neo4jClient. 我用的是第三方这个。
最有用的官方文档就这一篇:https://github.com/Readify/Neo4jClient/wiki/cypher-examples
同类型节点建立关系没有问题,比如Person1认识Person2这种,在“Relate two existing users”这块很详细了。
问题就出在非同一类型的节点建立关系的时候,比如Person1拥有Book1这样,使用官方那个sample是不行的。搜遍全网也没找到解决方案,这里记录一下。
如果按照官方文档来写Cypher,是这样的(以官方movie数据库为例)。
MATCH (p:Person), (m:Movie)
WHERE p.name="J.T. Walsh" , m.title="Unforgiven"
CREATE (p)-[r:ACTED_IN]->(m)
return r
执行结果会报错

正确的是这样
MATCH (p:Person), (m:Movie)
WHERE p.name="J.T. Walsh" and m.title="Unforgiven"
CREATE (p)-[r:ACTED_IN]->(m)
return r
与官方文档中同类型节点不同的是,where条件中两个条件中的逗号,改为 "and"

使用Neo4jClient写入的话,同样需要修改一下。
官方sample:
graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == )
.AndWhere((User user2) => user2.Id == )
.Create("user1-[:FRIENDS_WITH]->user2")
.ExecuteWithoutResults();
正确写法(注意CreateUnique后面的d和s必须用小括号包起来,不然也是疯狂报错)
_graphClient.Cypher
.Match("(d:Person)", "(s:Movie)")
.Where((Person d) => d.name =="aaa")
.AndWhere((Movie s) => s.name == "bbb")
.CreateUnique("(d)-[:ACTED_IN{rel}]->(s)")
.WithParam("rel", new { name="扮演" })
.ExecuteWithoutResults();
当然,如果关系不需要有属性的话是这样的,去掉rel就可以了
_graphClient.Cypher
.Match("(d:Person)", "(s:Movie)")
.Where((Person d) => d.name =="aaa")
.AndWhere((Movie s) => s.name == "bbb")
.CreateUnique("(d)-[:ACTED_IN]->(s)")
.ExecuteWithoutResults();
目前就这些小坑
Neo4j填坑记录-Neo4jClient建立节点、建立关系相关的更多相关文章
- webapp填坑记录[更新中]
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- webapp填坑记录
网上也有许多的 webapp 填坑记录了,这几个月,我在公司正好也做了2个,碰到了一些问题,所以我在这里记录一下我所碰到的问题: meta 头部声明在开发的时候,刚刚创建 HTML 文件,再使用浏览器 ...
- Phoenix踩坑填坑记录
Phoenix踩坑填坑记录 Phoenix建表语句 如何添加二级索引 判断某表是否存在 判断索引是否存在 Date类型日期,条件判断 杂项 记录Phoenix开发过程中的填坑记录. 部分原文地址:ph ...
- Kafka踩坑填坑记录
Kafka踩坑填坑记录 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 二. 一.kafka通过Java客户端,消费者无法接收消息,生产者发送失败消息 在虚拟机上,搭建了3台 ...
- Linux踩坑填坑记录
Linux踩坑填坑记录 yum安装失败[Errno 14] PYCURL ERROR 6 - "Couldn't resolve host 'mirrors.aliyun.com'" ...
- F2eTest和uirecorder自动化测试环境部署填坑记录
坑1:尝试部署的时候只在opennode.bat里面填写了两个浏览器,测试通过后再增加其他浏览器,页面上一直不显示. 填坑:需要清空数据库里的`wd_browsers`和`wd_nodes`表,然后重 ...
- 微信小程序发送红包功能。填坑记录
微信官方文档 1.开通条件 (1)商户号已入驻90日 (2)商户号有连续30天正常交易 (3)只有企业资质的商户才有资格申请 2.注意事项 (1)目前小程序红包仅支持用户微信扫码打开小程序 (2)小程 ...
- MVC5项目转.Net Core 2.2学习与填坑记录(1)
流程都是自己摸索,错误地方随便指正... 老项目过于臃肿,并且所有请求都是提交到一个api中,这样当api挂掉的时候,基本所有的项目都瘫痪掉了. 在4月底的时候,下决心将项目用微服务进行重写,刚开始的 ...
- iOS工作小技巧及填坑记录
以下是本人在iOS开发工作中使用的一些小技巧,记录一下. 1.使用XXX.pch文件便捷开发+加速Build 在IOS开发的项目中有一个XX_Prefix.pch XX_Prefix.pch:扩展名. ...
随机推荐
- stand up meeting 12-8
根据计划今天项目组成员和travis老师毕然同学进行了最后一次关于design和feature的确认meeting. 项目design和UI的改动较大,feature改动较小,需对UI进行重新整合,对 ...
- linux通过进程名查看其占用端口
1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 参考: https://blog.csdn.net/sinat ...
- JavaScript思维导图很全(W3C上的!!!!很重要快来看!)
- centos 部署 vue项目
安装Nodejs 下载安装包,可选择其他版本 node-v10.16.0-linux-x64.tar.xz 将下载文件上传至linux服务器并解压 tar -xvf node-v10.16.0-lin ...
- js拼接php拼接
当我们用到ajax的时候,局部替换的时候,我们可以在前台拼接,后台拼接,这个取决于你是前端后端这样拼接判断比较好, 判断不拼接,判断的值进行拼接 然后在html 替换 $.each 前台循环 ...
- WebLogic上的项目无法更新,删除项目缓存
/root/bea/user_projects/domains/base_domain/servers/AdminServer/tmp/ /root/bea/user_projects/domains ...
- ubuntu(物理机)连接ARM开发板
非虚拟机 ubuntu下连接开发板 首先安装超级终端minicom sudo apt-get install minicom 安装完minicom以后,需要将开发板和电脑进行物理连接.需要使用一条网线 ...
- 【EditPlus】参数设置
1. 设置javac,java快捷键 工具-参数设置-工具-用户工具 组和工具项-组名,更改组名为“java” 添加工具 javac 菜单文字:javac 命令:安装java的javac.exe的绝对 ...
- JS代码规范
JS代码规范 空格 二元运算符两侧必须有一个空格,一元运算符与操作对象之间不允许有空格. var a = !arr.length; a++; a = b + c; 复制代码 用作代码块起始的左花括号 ...
- google proto buf学习
2019独角兽企业重金招聘Python工程师标准>>> protobuf是Google开发的一个序列化框架,类似XML,JSON,基于二进制,比传统的XML表示同样一段内容要短小得多 ...