【发布时间】:2017-03-13 10:48:53
【问题描述】:
我将迭代数据添加到我的 neo4j 数据库中,但我不知道如何覆盖或更新现有数据以及检查数据是否已存在其中。
基本上我有一组带有相应 id 的电影,例如:
[
{id: 'gameofthrones', genre: 'fantasy', release: '2017'},
{id: 'inception', genre: 'scifi', release: '2010'},
...
]
我可以按如下方式添加电影:
CREATE
(m1:Movie {id: 'gameofthrones', genre: 'fantasy', release: '2017'}),
(m2:Movie {id: 'inception', genre: 'scifi', release: '2010'})
但是,当我运行脚本两次时,它会创建 4 个节点,而不是保留在两个节点上。
所以我的问题是,如何确保它检查节点 id 是否已经存在,如果存在则覆盖它而不是创建新节点?
我试过了(但只添加了属性)
// data
attributes['id'] = 'gameofthrones';
attributes['genre'] = 'fantasy';
...
// query
MERGE ( s:Movie {attributes}.id)
ON CREATE SET ( s:Movie {attributes} )
我在NodeJS 中调用如下:
executeQuery(queryStr, {"attributes": attributes})
// cypher (nodejs)
function executeQuery(queryStr, params) {
var qq = Q.defer();
db.cypher({
query: queryStr,
params: params,
}, function (error, results) {
if (error) {
qq.reject(error);
} else {
if (results.length != 0) {
qq.resolve(true);
} else {
qq.resolve(false);
}
};
});
return qq.promise;
};
【问题讨论】:
-
如何加载数据? apoc.load.json ? -- 使用 apoc.load.json 更新示例
-
嗯,不,我只是将数据作为对象。
标签: neo4j graph-databases graphenedb