簡體   English   中英

如何在Neo4j中創建節點(如果不存在)

[英]How to create a node (if not exists) with in Neo4j

我正在嘗試創建一個系統,管理員可以將blogPostblogPost首頁。 我使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM