データベースにNode-Neo4jクライアントを使用しています。一意のノードを作成したいのですが、Node-Neo4jのドキュメントでその方法を見つけることができませんでした。以下のロジックを使用して、ノードが存在するかどうかを確認しました。
person_param = {"name": namesurname, "userid": userid };
person_node = db.createNode(person_param);
if (!person_node.exists){
person_node.save(function(err, result){
//if(err) and if(!err) stuff
});
}
しかし、私が理解していることから、 createNode
最初から新しいノードを作成し、使用するとき exists
その上で、新しく作成されたノードがデータベースに保存されたかどうかをチェックします。
指定されたプロパティを持つノードが既にdbに存在するかどうかを確認するにはどうすればよいですか?
前もって感謝します。
回答:
回答№1は1私が考えることができる唯一の解決策は、次のとおりです。
- プロパティオブジェクトを作成する
- それらのプロパティについてNeo4Jインスタンスをクエリする
- 結果が返される場合は、それを使用します
- それ以外の場合は保存します
コード内:
var person_param = {"name": namesurname, "userid": userid };
// Build a Cypher query
var query = [
"MATCH (user: {name: {name}, id: {userid}})",
"RETURN user"
].join("n");
// use your params in the query
var params = person_param;
// Send the Cypher query
db.query(query, params, function (err, results) {
if (err) throw err;
// no node with such properties found
if(!results.length){
saveNode(params, callback)
} else {
// carry on with your code...
}
});
function saveNode(person_param, callback){
var person_node = db.createNode(person_param);
person_node.save(function(err, result){
//if(err) and if(!err) stuff
// call the callback here
});
}
このアプローチの欠点は、それぞれに対してCypherクエリを作成する必要があることです タイプ なぜなら、プロパティ名と値の両方をCypherに渡す方法がない(私の知る限り)からです。