[英]How to create a node (if not exists) with in Neo4j
我正在嘗試創建一個系統,管理員可以將blogPost
推blogPost
首頁。 我使用Neo4j保存這些對象的Mongo ID(不是最好的方法,但是我被學校強迫同時使用Neo4j和MongoDB)。
現在,我進行了查詢,它可以正常工作,它可以保存管理員,博客文章和added_by
關系。 問題在於它會創建管理員,博客文章,無論它們是否已經存在。 我該如何解決? 我的圖現在一團糟。
這是我的Node.js路由和查詢:
routes.post('/blogPosts/frontpage/:id/:aid', function (req, res) {
const id = req.param('id');
const aid = req.param('aid');
session
.run("CREATE(n:BlogPost {mongoId:{idNeo}}), (b:Admin {mongoAdminId:{idNeoAd}})", {idNeo: id, idNeoAd: aid});
session
.run("MATCH (u:BlogPost {mongoId:{idNeo}}), (r:Admin {mongoAdminId:{idNeoAd}}) CREATE (u)-[:ADDED_BY]->(r)", {idNeo: id, idNeoAd: aid})
.then(function(result) {
res.status(200).json({"response": "BlogPost added to front page."});
session.close();
})
.catch((error) => {
res.status(400).json(error);
});
});
如何更改我的路線,以僅添加尚不存在的管理員/帖子?
編輯:
session.run("CREATE (u:BlogPost {mongoId:{idNeo}}), (r:Admin {mongoAdminId:{idNeoAd}}) CREATE UNIQUE(u)-[:ADDED_BY]->(r)", {idNeo: id, idNeoAd: aid})
這樣可以解決混亂問題,但是即使存在節點也仍然可以創建節點。
現在,我在查詢中遇到語義錯誤(在session.run中)
routes.post('/blogPosts/frontpage/:id/:aid', function (req, res) {
const id = req.param('id');
const aid = req.param('aid');
session
.run("MERGE (n:BlogPost {mongoId:{idNeo}}) MERGE (b:Admin {mongoAdminId:{idNeoAd}}) CREATE UNIQUE(u)-[:ADDED_BY]->(r)", {idNeo: id, idNeoAd: aid})
.then(function(result) {
res.status(200).json({"response": "BlogPost added to front page."});
session.close();
})
.catch((error) => {
res.status(400).json(error);
});
});
在這種情況下,請使用MERGE而不是CREATE。 關於MERGE的文檔說:
MERGE子句確保圖形中存在模式。 該模式已經存在,或者需要創建。
嘗試將查詢更改為:
MERGE (n:BlogPost {mongoId:{idNeo}}) MERGE (b:Admin {mongoAdminId:{idNeoAd}})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.