当前位置:   article > 正文

山东大学数据科学导论有关neo4j知识图谱的增删改查(利用vue-neo4j组件实现)_neo4j vue components treetable

neo4j vue components treetable

目录

前言:

登录:

查询数据:

删除数据:

后续:


前言:

笔者在浏览中偶然注意到可以直接利用vue组件来直接操作数据库的组件:vue-neo4j,但是使用下来比较坑,特写下本文,希望对大家有帮助:

参考文章:

(244条消息) 使用Vue-neo4j绘制三国人物图谱关系_K歌、之王的博客-CSDN博客_neo4j vue

首先是网址介绍:

vue-neo4j - npm (npmjs.com)

我是直接下的文件夹

直接放到项目中就好,

接下来需要下载补充依赖:

 

idea会自动提示的

检查vue版本:

 

如果版本高的话会报错

需要在index.js进行以下修改:

修改后:

 

 接下来需要运行,这里讲一下登录是怎么实现的

首先cmd打开命令窗口,输入neo4j.bat console运行neo4j:

运行成功后的结果:

 在浏览器中输入

http://localhost:7474/browser/

运行可视化界面

 

为了让项目更加完整,我做了登陆界面:

登录:

  1. <template>
  2. <div style="width: 100%; height: 100vh ; background-color: wheat; overflow: hidden" >
  3. <div style="width: 400px; margin:150px auto ; border: orange solid 1px; padding: 30px; border-radius:20px">
  4. <div style="color: orange;font-size: 40px;text-align: center; padding: 30px 0" >欢迎登陆Neo4j</div>
  5. <div style="color: chocolate;font-size:20px; text-align: center; padding: 10px 0">powered by</div>
  6. <div style="color:chocolate;font-size:18px; text-align: center; padding: 10px 0">
  7. 嗷呜不停 </div>
  8. <el-form>
  9. <el-form-item >
  10. <el-input v-model="username" />
  11. </el-form-item>
  12. <el-form-item >
  13. <el-input v-model="password" show-password/>
  14. </el-form-item>
  15. <el-button style="width: 100%" type="warning" @click="connect()">登录</el-button>
  16. </el-form>
  17. </div>
  18. </div>
  19. </template>
  20. <script>
  21. export default {
  22. name: 'Login',
  23. data() {
  24. return{
  25. protocol: 'bolt',
  26. host: 'localhost',
  27. port: 7687,
  28. password:'',
  29. username:'',
  30. }
  31. },
  32. methods:{
  33. connect() {
  34. return this.$neo4j.connect(this.protocol, this.host, this.port, this.username, this.password)
  35. .then(driver => {
  36. this.testQuery();
  37. }).catch((error)=>{
  38. console.log('error: ' + error)
  39. })
  40. },
  41. testQuery() {
  42. // Get a session from the driver
  43. const session = this.$neo4j.getSession()
  44. const that=this;
  45. session.run('MATCH (n) RETURN n LIMIT 100')
  46. .then(res => {
  47. console.log('connection successful!')
  48. console.log(res)
  49. this.$message({
  50. type: 'success',
  51. message: '登陆成功'
  52. })
  53. sessionStorage.setItem("username",this.username);
  54. sessionStorage.setItem("password",this.password);
  55. that.$router.push("/home")
  56. }).catch(err => {
  57. console.log("catch: ", err);
  58. alert('连接失败,检查用户名和密码!')
  59. })
  60. .then(() => {
  61. session.close()
  62. })
  63. },
  64. checkData(){
  65. console.log('userName:'+this.username+'\n password'+this.password)
  66. }
  67. },
  68. components: {
  69. }
  70. }
  71. // const session = this.$neo4j.getSession()
  72. // Or you can just call this.$neo4j.run(cypher, params)
  73. // session.run('MATCH (n) RETURN n LIMIT 10000')
  74. // .then(res => {
  75. // console.log(res)//,res.records[0].get('count')
  76. // })
  77. // .then(() => {
  78. // session.close()
  79. // })
  80. </script>

 

接下来给大家讲解一下怎样利用vue-neo4j来实现增删改查

查询数据:

这里利用了element-plus组件,代码如下:

  1. <template>
  2. <!--<div>-->
  3. <!-- <h2>查询</h2>-->
  4. <!-- <br>-->
  5. <!--</div>-->
  6. <div style="padding: 20px">
  7. <div style="margin: 10px 0">
  8. <el-input v-model="search" placeholder="输入关键字 " style="width: 25%"></el-input>
  9. <el-button type="primary" style="margin-left: 10px" @click="Query()">查询</el-button>
  10. </div>
  11. <el-table :data="listData" stripe style="width: 100%">
  12. <el-table-column prop="jbmc" label="疾病名称" width="220" />
  13. <el-table-column prop="gx" label="相应举措" sortable width="220" />
  14. <el-table-column prop="ywmc" label="诊疗关系" sortable width="620" />
  15. </el-table>
  16. </div>
  17. </template>
  18. <script>
  19. export default {
  20. name: "QueryView",
  21. data(){
  22. return{
  23. search:'',
  24. listData:[],
  25. list:[],
  26. tableData : [
  27. {
  28. jbmc: '2016-05-03',
  29. ywmc: 'Tom',
  30. gx: 'No. 189, Grove St, Los Angeles',
  31. },
  32. {
  33. jbmc: '2016-05-02',
  34. ywmc: 'Tom',
  35. gx: 'No. 189, Grove St, Los Angeles',
  36. },
  37. ]
  38. }
  39. },
  40. methods:{
  41. connect() {
  42. return this.$neo4j.connect('bolt', 'localhost', 7687, sessionStorage.getItem('username'), sessionStorage.getItem('password'))
  43. .then(driver => {
  44. // this.testQuery();
  45. }).catch((error)=>{
  46. console.log('error: ' + error)
  47. })
  48. },
  49. Query(){
  50. let dateBegin = new Date();
  51. this.connect()
  52. const session = this.$neo4j.getSession();//'${this.formInline.startNode}'
  53. let cypher = `match p=(n:yaowu)-[]->(m:jibing{jbmc:'${this.search}[疾病]'}) return p limit 100`;
  54. session.run(cypher).then(res => {
  55. const length = res.records.length;
  56. console.log(res);
  57. //比如想把另外一个数组中编列出来的值加入到这个数组中
  58. for (let index = 0; index < length; index++) {
  59. this.listData.push({ jbmc: "", ywmc:"",gx: ""});
  60. this.listData[index].jbmc= res.records[index]._fields[0].end.properties.jbmc;
  61. this.listData[index].gx= res.records[index]._fields[0].segments[0].relationship.properties.gx;
  62. this.listData[index].ywmc= res.records[index]._fields[0].start.properties.ymmc;
  63. }
  64. let dateEnd = new Date();
  65. let dateDiff = dateEnd.getTime() - dateBegin.getTime();
  66. console.log('花费时间:'+dateDiff)
  67. console.log(this.listData)
  68. this.$message({
  69. type: 'success',
  70. message: '查询花费'+dateDiff+'ms'
  71. })
  72. })
  73. }
  74. },
  75. }
  76. </script>
  77. <style scoped>
  78. </style>

 

在 <template> 标签中,定义了一个带有输入框和按钮的表单,输入框用于输入查询关键字,按钮用于点击后执行查询。

在 data 选项中,定义了search、listData、list、tableData等变量。

在 methods 选项中,定义了 connect() 和 Query() 两个函数。connect() 函数会使用 this.$neo4j.connect() 函数来连接 Neo4j 数据库,并使用sessionStorage.getItem('username')和sessionStorage.getItem('password')获取用户名和密码登录。Query()函数会先连接Neo4j数据库,然后使用 this.$neo4j.getSession() 函数来获取一个 Neo4j 会话,然后使用 Cypher 查询语句来查询数据,并将查询结果存储到 listData 中,Cypher语句包含了一个参数 this.search,它是在用户在输入框中输入的查询关键字。

在查询的过程中,使用了 for 循环来遍历查询结果,并将结果存储到 listData 中。

最后,使用 this.$message 函数来显示查询成功的消息,并在控制台中输出查询花费的时间。

在 <el-table> 中,定义了一个表格,用来显示查询结果。

总的来说,这段代码实现了一个能够查询 Neo4j 数据库并显示结果的组件。

 

 

  1. <template>
  2. <!--<div>-->
  3. <!-- <h1>增加数据</h1>-->
  4. <!--</div>-->
  5. <div style="padding: 30px">
  6. <el-form
  7. label-width="100px"
  8. style="max-width: 460px;padding: 20px">
  9. <el-form-item label="疾病名称">
  10. <el-input v-model="diseaseName" placeholder="disease name" />
  11. </el-form-item>
  12. <el-form-item label="相应举措">
  13. <el-input v-model="needToDo" placeholder="Corresponding measures" />
  14. </el-form-item>
  15. <el-form-item label="诊疗关系">
  16. <el-input v-model="howToDealWith" placeholder="Diagnostic and therapeutic relationships"/>
  17. </el-form-item>
  18. <!-- <el-form-item label="Activity form">-->
  19. <!-- <el-input v-model="name" />-->
  20. <!-- </el-form-item>-->
  21. <el-form-item>
  22. <el-button type="primary" @click="OnSubmit()" style="width: 100%">增加数据</el-button>
  23. </el-form-item>
  24. </el-form>
  25. </div>
  26. </template>
  27. <script>
  28. export default {
  29. name: "changeDataView",
  30. data(){
  31. return{
  32. listData:[],
  33. diseaseName:'',
  34. needToDo:'',
  35. howToDealWith:'',
  36. }
  37. },
  38. methods: {
  39. connect() {
  40. return this.$neo4j.connect('bolt', 'localhost', 7687, sessionStorage.getItem('username'), sessionStorage.getItem('password'))
  41. .then(driver => {
  42. // this.testQuery();
  43. }).catch((error)=>{
  44. console.log('error: ' + error)
  45. })
  46. },
  47. OnSubmit(){
  48. let dateBegin = new Date();
  49. this.connect();
  50. const session = this.$neo4j.getSession();//'${this.formInline.startNode}'
  51. //match p=(n:yaowu)-[]->(m:jibing{jbmc:'${this.search}[疾病]'}) return p limit 100
  52. let cypher = `create(yaowu1:yaowu{ymmc:'${this.howToDealWith}'})-[gx1:rel{gx:'${this.needToDo}'}]->(jibing1:jibing{jbmc:'${this.diseaseName}[疾病]'})
  53. return gx1`;
  54. session.run(cypher).then(res => {
  55. console.log(res)
  56. let dateEnd = new Date();
  57. let dateDiff = dateEnd.getTime() - dateBegin.getTime();
  58. console.log('花费时间:'+dateDiff)
  59. console.log(this.listData)
  60. this.$message({
  61. type: 'success',
  62. message: '增加数据花费'+dateDiff+'ms'
  63. })
  64. })
  65. }
  66. }
  67. }
  68. </script>
  69. <style scoped>
  70. </style>

本段代码使用了 vue-neo4j 这个库来连接并操作 Neo4j 图数据库。

组件中定义了一些 data,例如:diseaseName、needToDo、howToDealWith,这些数据是用来存储页面上用户输入的疾病名称,应该采取的举措和该如何处理。

在 methods 中定义了一个 connect() 方法和 OnSubmit() 方法。 connect() 方法用来连接 Neo4j 数据库,OnSubmit() 方法用来在数据库中创建一条关于疾病的数据,并在操作完成后给出提示。

OnSubmit() 方法中使用了 cypher 查询语句来创建节点和关系,并返回新建关系。

最后,在代码的最后,使用了 $message 组件来提示用户操作成功,并显示花费时间。

上述代码实现了增加数据的功能

删除数据:

 

  1. <script>
  2. export default {
  3. name: "DeleteDataView",
  4. data(){
  5. return{
  6. listData:[],
  7. deleteDataOfItem:''
  8. }
  9. },
  10. methods:{
  11. connect() {
  12. return this.$neo4j.connect('bolt', 'localhost', 7687, sessionStorage.getItem('username'), sessionStorage.getItem('password'))
  13. .then(driver => {
  14. // this.testQuery();
  15. }).catch((error)=>{
  16. console.log('error: ' + error)
  17. })
  18. },
  19. QueryData(){
  20. let dateBegin = new Date();
  21. this.connect()
  22. const session = this.$neo4j.getSession();//'${this.formInline.startNode}'
  23. let cypher = `match p=(n:yaowu)-[]->(m:jibing{jbmc:'${this.deleteDataOfItem}[疾病]'}) return p `;
  24. session.run(cypher).then(res => {
  25. const length = res.records.length;
  26. console.log(length)
  27. if (length!==0){
  28. this.listData.push({ jbmc: "", jbsm:"",gx: ""});
  29. this.listData[0].jbmc=this.deleteDataOfItem;
  30. this.listData[0].jbsm=length;
  31. }
  32. }
  33. )
  34. },
  35. onDelete() {
  36. this.connect();
  37. this.listData[0].jbsm=0;
  38. const session = this.$neo4j.getSession();
  39. let cypher = `match(n:jibing{jbmc:'${this.deleteDataOfItem}[疾病]'}) DETACH DELETE (n) `;
  40. session.run(cypher);
  41. alert("删除成功!")
  42. // cypher = `MATCH (n:Person) delete n`;
  43. // session.run(cypher).then(() => {
  44. // session.close()
  45. // });
  46. //this.QueryData();
  47. },
  48. }
  49. }
  50. </script>
  51. <style scoped>
  52. </style>

本段代码实现了一个名为"DeleteDataView"的页面。它包含了三个函数,分别是connect,QueryData和onDelete。

connect函数是用来连接Neo4j数据库的,它首先使用$neo4j.connect()方法连接数据库,连接参数分别是协议、主机、端口、用户名和密码。如果连接成功,则会返回一个驱动器。如果连接失败,则会抛出一个错误。

QueryData函数是用来查询数据的。首先,它调用connect函数连接数据库,然后使用$neo4j.getSession()方法获取一个会话。它使用cypher语句来查询数据,并将查询结果保存在listData数组中。

onDelete函数是用来删除数据的。它首先使用connect函数连接数据库,然后使用$neo4j.getSession()方法获取一个会话。然后使用cypher语句来删除数据,最后提示删除成功。

后续:

以上就是利用vue-neo4j来直接连接neo4j数据库的参考方案,希望对大家有帮助,但是我必须要提醒大家:没有后端进行校验就运行前端直接连接数据库是十分危险的!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/904295
推荐阅读
相关标签
  

闽ICP备14008679号