neo4j - neo4j cypher 基于属性字符串值创建两个节点之间的关系
问题描述
我有一个带有标签 Experiment 的节点,其属性名为 ExperimentName。
这个 ExperimentName 是基于 3 个不同变量的串联
“条件(ExperimentProfile1)剂量”
例子 :
Control diet (MOA77) LD
Control gavage(MOA66) HD
我有另一个名为 ExperimentMapper 的节点,它有 3 个属性: - Condition - ExperimentProfile - Dose
当 ExperimentName是 3 个属性组装的结果时,我想在 Node Experiment和 Node ExperimentMapper之间创建一个关系。
我曾尝试使用正则表达式,但查询速度非常慢并且需要很长时间..
有什么帮助吗?
这是我的密码,但尽管我创建了索引,但它需要永远
MATCH (mxpExperiment:MxpExperiment) OPTIONAL MATCH (otuExperimentMapper:OtuExperimentMapper)
WHERE mxpExperiment.name CONTAINS otuExperimentMapper.Condition
AND mxpExperiment.name CONTAINS otuExperimentMapper.Experiment
AND mxpExperiment.name CONTAINS otuExperimentMapper.dose
CREATE (mxpExperiment)-[:OTU_EXPERIMENT_MAPPER]->(otuExperimentMapper)
RETURN mxpExperiment, otuExperimentMapper
解决方案
我认为你需要从Experiment Mapper
.
首先你需要创建一个索引:
CREATE INDEX ON :MxpExperiment(name)
那么查询可以如下:
MATCH (otuExperimentMapper:OtuExperimentMapper)
WITH otuExperimentMapper,
otuExperimentMapper.Condition + ' (' +
otuExperimentMapper.Experiment + ') ' +
otuExperimentMapper.dose AS name
MATCH (mxpExperiment:MxpExperiment) WHERE mxpExperiment.name = name
MERGE (mxpExperiment)-[:OTU_EXPERIMENT_MAPPER]->(otuExperimentMapper)
RETURN mxpExperiment, otuExperimentMapper
推荐阅读
- javascript - 合并两个类
- jquery - 根据 li 内子节点的活动类别隐藏导航箭头
- uwp - 检查 NTFS 是否是 UWP 中卷的文件系统
- selenium - 不同的网络会导致 UnreachableBrowserException 异常吗?
- php - Laravel API:api.php 文件中的 url 匹配
- azure-data-explorer - 汇总语句中的 KQL 多个聚合
- nestjs - 如何将排序参数传递给订单?
- python - 如何获取具有相同名称的应用程序窗口的窗口句柄?
- google-apps-script - 尝试编辑 Google 表格按字母顺序排列表格脚本以将特定命名的表格放在休息前
- angular - 所有路由查询参数都是字符串 - 打字稿不知道自动转换为所需的类型