gpt4 book ai didi

neo4j - 如何向neo4j图形数据库添加唯一数据

转载 作者:行者123 更新时间:2023-12-04 14:40:21 27 4
gpt4 key购买 nike

我正在将数据迭代添加到我的 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;
};

最佳答案

您必须将查询更改为此

MERGE ( s:Movie {attributes}.id)
ON CREATE SET s += {attributes}
ON MATCH SET s += {attributes} // optional

这应该可以工作,但您应该使用 apoc.map.clean() 以免设置 id 两次,这可能会导致一些问题。
MERGE ( s:Movie {attributes}.id)
ON CREATE SET s += apoc.map.clean({attributes},['id'],[])

关于neo4j - 如何向neo4j图形数据库添加唯一数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42761742/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com