Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher:基于多个关系属性查找节点_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher:基于多个关系属性查找节点

Neo4j Cypher:基于多个关系属性查找节点,neo4j,cypher,Neo4j,Cypher,我想做一个查询,查找包含用户传递的所有成分(未知量)的配方 我可以通过此查询查找基于一种成分的配方: MATCH (r:Recipe)-[:CONTAINS]->(i:Ingredient {name: 'carrot'}) RETURN r 例如,我如何找到包含以下每种成分的所有食谱;胡萝卜、菠萝、芹菜、西红柿、生姜?将所需成分表示为一个列表,并使用谓词检查食谱是否包含列表中的所有成分。诀窍在于,只要不引入新变量,就可以使用: 因此,模式不仅是表达式,也是谓词。您的模式的唯一限制是必须

我想做一个查询,查找包含用户传递的所有成分(未知量)的配方

我可以通过此查询查找基于一种成分的配方:

MATCH (r:Recipe)-[:CONTAINS]->(i:Ingredient {name: 'carrot'})
RETURN r

例如,我如何找到包含以下每种成分的所有食谱;胡萝卜、菠萝、芹菜、西红柿、生姜?

将所需成分表示为一个列表,并使用谓词检查食谱是否包含列表中的所有成分。诀窍在于,只要不引入新变量,就可以使用:

因此,模式不仅是表达式,也是谓词。您的模式的唯一限制是必须能够在单个路径中表达它。不能像在MATCH中那样在多个路径之间使用逗号。通过将多个模式与和组合,可以实现相同的效果

请注意,这里不能引入新变量。[……]

此查询返回包含您列出的所有成分的每个配方:

MATCH (r:Recipe)
WHERE ALL(
  ingredient IN ['carrot', 'pineapple', 'celery', 'tomato', 'ginger']
  WHERE (r)-[:CONTAINS]->(:Ingredient {name: ingredient})
)
RETURN r
我想您会将用户输入作为参数传递:

MATCH (r:Recipe)
WHERE ALL(
  ingredient IN { ingredients }
  WHERE (r)-[:CONTAINS]->(:Ingredient {name: ingredient})
)
RETURN r

将所需的成分表示为一个列表,并使用谓词检查配方是否包含列表中的所有成分。诀窍在于,只要不引入新变量,就可以使用:

因此,模式不仅是表达式,也是谓词。您的模式的唯一限制是必须能够在单个路径中表达它。不能像在MATCH中那样在多个路径之间使用逗号。通过将多个模式与和组合,可以实现相同的效果

请注意,这里不能引入新变量。[……]

此查询返回包含您列出的所有成分的每个配方:

MATCH (r:Recipe)
WHERE ALL(
  ingredient IN ['carrot', 'pineapple', 'celery', 'tomato', 'ginger']
  WHERE (r)-[:CONTAINS]->(:Ingredient {name: ingredient})
)
RETURN r
我想您会将用户输入作为参数传递:

MATCH (r:Recipe)
WHERE ALL(
  ingredient IN { ingredients }
  WHERE (r)-[:CONTAINS]->(:Ingredient {name: ingredient})
)
RETURN r

如果安装了的3.1版本,则可以使用
apoc.coll.containsAll
功能。例如:

MATCH (r:Recipe)-[:CONTAINS]->(ing:Ingredient)
WITH r, COLLECT(ing.name) AS names
WHERE apoc.coll.containsAll(names, {ingredients})
RETURN r;

(如果您安装了3.0版本的库,
apoc.coll.containsAll
将是一个过程,并且必须相应地修改上面的查询。)

如果您安装了3.1版本的库,则可以使用
apoc.coll.containsAll
函数。例如:

MATCH (r:Recipe)-[:CONTAINS]->(ing:Ingredient)
WITH r, COLLECT(ing.name) AS names
WHERE apoc.coll.containsAll(names, {ingredients})
RETURN r;
(如果安装库的3.0版本,
apoc.coll.containsAll
将是一个过程,必须相应地修改上面的查询。)