在neo4j cypher会话中捕获错误:structure (127 [object] [object])

catch error: structure (127 [object] [object]) on neo4j cypher session

本文关键字:object structure 错误 cypher neo4j 会话      更新时间:2023-09-26

我以前有过类似的错误,但这是由.run语句中的语法错误引起的。

我一遍又一遍地看这段代码,找不到语法,所以我认为还有别的事情在发生。该函数由护照反序列化器调用,并使用node-inspector确认"id"的值。但是,无论使用哪种类型的MATCH查询,都会得到相同的.catch错误。

我已经尝试了WHERE选项和直接选项…它们都在neo4j浏览器中工作。有人能看到我没看到的吗

router.getUserByID = function (id, callback) {
      session
      .run ("MATCH (user {id(user) : {paramUserID}}) RETURN user",{paramUserID: parseInt(id)})
      .then (function(result)
       {
        if ( !result.records[0]) 
            {
             console.log("unknow user by id");
             session.close();
             if (typeof callback==="function") {
               return callback(null,false);
              }
            }     // end of if not found
          else
           {
              console.log("user by id found");
              session.close();
              if (typeof callback === "function") {
               return callback(null,result); 
               }
            }
        })
     .catch(function(err)
            {
            console.log("catch error: "+err);
            });        
     }  // end of get user by id

您不能以这种方式引用节点的Neo4j id,您必须使用WHERE子句:

MATCH (user) WHERE id(user) = {paramUserID} RETURN user;

如果您有一个应用程序id(几乎总是一个好主意),那么您可以这样做:

MATCH (user {uuid: {paramUuid}}) RETURN user;

使用标签会更好,因为不同的实体可以有相同的id,并且您可以使用唯一性约束(它也对值进行索引,因此查询更快):

CREATE CONSTRAINT ON (n:User) ASSERT n.uuid IS UNIQUE;
// Later
MATCH (user:User {uuid: {paramUuid}}) RETURN user;