2014-04-14 103 views
0

我正在使用Node-Neo4j客戶端作爲我的數據庫。我想創建獨特的節點,但我無法找到如何在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,它只是檢查,如果新創建的節點是否保存到數據庫中。

如何檢查提供屬性的節點是否已經存在於數據庫中?

在此先感謝。

回答

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。

+0

我想現在我會使用這種方法。謝謝你,兄弟。 – mtndesign