Neo4j插入具有各种关系的节点
我试图创build“配方”,“成分”和“用户”节点(作者)。
基本上,作者可以有很多的食谱; 和食谱有成分多对多的关系。
我有这个查询:
MATCH (user:User) WHERE ID(user) = {uid} CREATE (recipe:Recipe {name:"receta 4"}) WITH ingredient MATCH (ingredient:Ingredient) WHERE ID(ingredient) = node(7) CREATE (recipe)-[ri:HAS {unit: "vasos", cant: 1}]-(ingredient) WITH ingredient MATCH (ingredient:Ingredient) WHERE ID(ingredient) = node(6) CREATE (recipe)-[ri:HAS {unit: "cditas", cant: 2}]-(ingredient) CREATE (user)-[:PREPARE]->(recipe) RETURN recipe
但是,我得到错误:
ingredient not defined (line 4, column 7) "WITH (ingredient:Ingredient)" ^ Neo.ClientError.Statement.InvalidSyntax
哪个是这个查询的正确forms?
我的js代码:
Recipe.create = function (req, callback) { var data = req.body; var uid = parseInt(req.params.id); var query = [ 'MATCH (user:User)', 'WHERE ID(user) = {uid}', 'CREATE (recipe:Recipe {data})', ]; // set ingredients var ingId; var unit; var cant; for (var i = data.ingredients.length - 1; i >= 0; i--) { ing = data.ingredients[i]; ingId = parseInt(ing.id); unit = ing.unit; cant = ing.cant; query.push( 'MATCH (ingredient:Ingredient)', 'WHERE ID(ingredient) = node(' + ingId + ')', 'CREATE (recipe)-[ri:HAS {unit: "'+unit+'", cant: '+cant+'}]-(ingredient)' ); } query.push( 'CREATE (user)-[:PREPARE]->(recipe)', 'RETURN recipe' ); query.join("\n"); db.cypher({ query:query, params:{ data: data, uid: uid } }, function (err, results) { if (err) return callback(err); console.log(results) callback(null, results); }); };
我相信问题是WITH子句引用下一个要创build的节点,而不是引用上一个要创build的节点。 此外,代码正试图创build无向关系。
尝试这个:
MATCH(用户:用户) WHERE ID(user)= {uid} CREATE(recipe:Recipe {name:“receta 4”}) 配方 MATCH(配料:配料) WHERE id(成分)= 7 CREATE(recipe) - [ri:HAS {unit:“vasos”,cant:1}] - >(成分) 配方 MATCH(配料:配料) 在哪里ID(成分)= 6 CREATE(recipe) - [ri:HAS {unit:“cditas”,cant:2}] - >(成分) CREATE(user) - [:PREPARE] - >(recipe) 返回食谱