database - 如何根据大量名称在 neo4j 数据库中查找节点
问题描述
所以我使用 neo4j 数据库,我想在这个数据库中找到某些人。人们被存储为节点,并且与其他节点具有某些属性和关系。现在我有一个我想找到的人的列表(xlsm/csv 文件)。此列表包含大约 8000 个名称以及我可以用于查询的其他属性。
我设法通过使用列表中的各个名称来搜索节点,例如:
MATCH (n)
WHERE n.name = 'Peter'
RETURN n.name, n.age
我也知道我可以查看某个属性是否出现在字符串列表中:
MATCH (a)
WHERE a.name IN ['Peter', 'Timothy']
RETURN a.name, a.age
但是,我无法通过手动输入列表中的数千个名称来创建查询。那么按我想找到的人过滤的最有效方法是什么?
解决方案
一种方法是使用LOAD CSV
- 通常您会使用它将数据加载到图表中,但您不必这样做。给定一个图表:
MERGE (:Person { name: 'Geoff' })
MERGE (:Person { name: 'Timothy' })
MERGE (:Person { name: 'Peter' })
一个 CSV 文件被放入数据库的导入目录中:
Name,Phone
Timothy,07700900100
Peter,07700900101
您可以将所有有兴趣搜索的名称加载到列表中,然后使用标准IN
子句查找它们:
LOAD CSV WITH HEADERS FROM 'file:///names.csv' AS line
WITH collect(line.Name) AS names
MATCH (p: Person) WHERE p.name IN names
RETURN p
请注意,我们已将 Geoff 排除在外,因为他不在 CSV 中。
另一种方法是尝试一次匹配传入 CSV 的每一行,这样可以更轻松地过滤多个属性:
LOAD CSV WITH HEADERS FROM 'file:///names.csv' AS line
MATCH (p: Person) WHERE p.name = line.Name AND p.phone = line.Phone
RETURN p
推荐阅读
- sql - 与聚合的 IN 相比,为什么 EXISTS 这么慢?
- java - 使用 Intent 在 Facebook 应用上打开帖子 ID
- visual-studio-code - 如何通过键盘在vscode中打开git分支选择?
- python - pygame.error:字体未初始化如何解决?
- python - 在 Django Orm 查询中需要帮助
- c# - 绑定到列表的 DataGrid 不允许用户添加新行
- mongodb - 具有多个键值对的 MongoDB 自定义排序
- python-3.x - 井字游戏项目_我被卡住了
- r - 如何让 glmer 模型将“丢失”数据读取为零?
- mongodb - 如何在 Mongodb 和 AWS 中使用 Flutter