如何从Node.js中的Cypher查询中检索非空对象

如何从Node.js中的Cypher查询中检索非空对象,node.js,neo4j,cypher,node-neo4j,Node.js,Neo4j,Cypher,Node Neo4j,给定一个节点,我想查询该节点的任何传入关系,并返回具有该关系的节点。我正在修改 我希望返回一个节点数组,为每个元素创建对象,然后引用节点属性。相反,我得到的是空的对象。但是,我确实获得了查询的正确节点数(即2个入站关系,返回2个元素) 我已经在cypher shell中运行了查询,得到了预期的结果。我正在使用Neo4j 1.9.2 关于图表: 我有一张系谱图,由8个人节点和2种关系类型组成:继承X,继承Y。这是指决定性别的染色体。例如,如果我有两个孩子,那么我有两个新的关系;我儿子继承Y,我女儿

给定一个节点,我想查询该节点的任何传入关系,并返回具有该关系的节点。我正在修改

我希望返回一个节点数组,为每个元素创建对象,然后引用节点属性。相反,我得到的是空的对象。但是,我确实获得了查询的正确节点数(即2个入站关系,返回2个元素)

我已经在cypher shell中运行了查询,得到了预期的结果。我正在使用Neo4j 1.9.2

关于图表: 我有一张系谱图,由8个人节点和2种关系类型组成:继承X,继承Y。这是指决定性别的染色体。例如,如果我有两个孩子,那么我有两个新的关系;我儿子继承Y,我女儿继承X

谢谢你的帮助

谢谢

以下是调用查询函数(getInbound)的位置:

exports.show = function (req, res, next) {
    Person.get(req.params.id, function (err, person) {
      if (err) return next(err);
      person.getInbound(function (err, inbound) {
      res.render('person', {
              person: person
      })
      })
})
})

以及getInbound函数:

Person.prototype.getInbound = function(callback) {
        var query = ['START p=node({ID})',
                     'MATCH p <-[:INHERITS_Y|INHERITS_X]- m',
                     'RETURN m'
        ].join('\n');

        var params = {
          ID: this.id,
          NAME: this.name
        };

        console.log("In getInbound function");
        console.log("this.name is  ",this.name);
        var in_nodes = [];

       db.query(query, params, function (err, results) {
               console.log("Error from the query ",err);
            if (err) return callback(err);
            console.log("Number of elements in array returned from query: ", results.length);
            for (var i=0; i< results.length; i++) {
                    console.log(" In the for loop, var i = ",i);
               var in_node = new Person(results[i]);
               console.log("New Person object created  from array element ", in_node);
               in_nodes.push(in_node);
              }
             callback(null, in_nodes);
         });

};
以及建造师的个人:

var Person = module.exports = function Person(_node) {
    // all we'll really store is the node; the rest of our properties will be
    // derivable or just pass-through properties (see below).

    this._node = _node;
}

Cypher查询结果绝不仅仅是一个节点数组——它们是一个结果数组,其中“result”是对应(node/rel/path/etc)对象的变量名字典

因此,在您的示例中,您的Cypher查询显示
返回m
,因此在
for
循环中,您需要访问
结果[i]['m']
,而不仅仅是
结果[i]


希望这能有所帮助。

Btw,通过ES5的
Array.prototype.map
,从每个结果中“提取”
m
节点很容易,例如
results.map(函数(res){return res['m'];})
。使用下划线.js更容易:
(results.pull('m')
。啊哈!我知道我错过了一些基本的东西。现在很有魅力。非常感谢您的回答和创建的模板应用程序!
var Person = module.exports = function Person(_node) {
    // all we'll really store is the node; the rest of our properties will be
    // derivable or just pass-through properties (see below).

    this._node = _node;
}