如何使用nodejs在neo4j中创建标签

时间:2014-03-11 11:10:04

标签: node.js neo4j label graph-databases

我使用以下方法使用nodejs在Neo4j中创建节点。我想创建一个带有标签的节点以及一些属性。

var query = [
        "CREATE (n:TYPE {props})",
        "RETURN n",
    ].join('\n').replace('TYPE','PLAYER'); 
    var params = {
        props: data,
    };


    neo4jClient.query(query, params, function (err, results) {
        if(err) return callback(err);
        var node = neo4jClient.createNode(results[0].n._data.data);
        var player = new Player(node);
        node.save(function (err) {
            console.dir(err);
            if (err) return callback(err);            
            node.index(INDEX_NAME, INDEX_KEY, INDEX_VAL, function (err) {               
                if (err) return callback(err);
                callback(null, player);
            });
        });
    });

问题: - 一切正常,但这种方法在neo4j中创建了两个节点。我不知道内部发生了什么。请在这个问题上给我一些意见。

2 个答案:

答案 0 :(得分:1)

您实际执行创建节点的查询(并且足够好)。

但是你再次开始创建一个新节点node.save() + node.index(),因为CREATE查询已经完成了工作,所以这两个节点都没有必要。

答案 1 :(得分:0)

它适用于以下功能。

neo4jClient.query(query, params, function (err, results) {
        if(err) return callback(err);
        var node = results[0].n;
        var player = new Player(node);  

        node.index(INDEX_NAME, INDEX_KEY, INDEX_VAL, function (err) {               
            if (err) return callback(err);
            console.log("=============================");
            callback(null, player);
        });
    });

neo4jClient.query本身创建一个节点,因此如果再次调用函数createNode,它也会创建第二个节点。因此,如果删除createNode函数,则.query函数创建一个节点,并且在数据库和nodejs中也是持久的。