我使用以下方法使用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中创建了两个节点。我不知道内部发生了什么。请在这个问题上给我一些意见。
答案 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中也是持久的。