0

データベースに 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 に既に存在するかどうかを確認するにはどうすればよいですか?

前もって感謝します。

4

1 に答える 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 に渡す方法がないためです。

于 2014-04-14T11:40:03.200 に答える