Използвам клиент на Node-Neo4j за db. Искам да създам уникален възел, но не успях да намеря как да го направя в документацията на 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.