首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >neo4j CYPHER --动态创建列表或映射集

neo4j CYPHER --动态创建列表或映射集
EN

Stack Overflow用户
提问于 2018-06-17 03:47:30
回答 1查看 718关注 0票数 0

要将XML数据导入neo4j数据库,我首先将该XML解析为python字典,然后使用CYPHER查询:

代码语言:javascript
复制
WITH $pubmed_dict as pubmed_article
UNWIND pubmed_article as particle
    MERGE (p:Publication {pmid: particle.MedlineCitation.PMID.text})
    ON CREATE SET p.title = COALESCE (particle.MedlineCitation.Article.Journal.Title, particle.MedlineCitation.Article.ArticleTitle)
    ON MATCH SET p.title = COALESCE (particle.MedlineCitation.Article.Journal.Title, particle.MedlineCitation.Article.ArticleTitle)

FOREACH (author IN particle.MedlineCitation.Article.AuthorList.Author |
  MERGE (a:Author {last_name: COALESCE(author.LastName, 'LAST NAME MISSING!'), first_name: COALESCE(author.ForeName, 'FIRST NAME MISSING!')})
  MERGE (p)<-[:WROTE]-(a)      
)

设置a.affiliation = author.AffiliationInfo.Affiliation很好,但前提是在Author下面没有多个从属关系,如下所示:

代码语言:javascript
复制
...
                <Author ValidYN="Y">
                    <LastName>Tatarsky</LastName>
                    <ForeName>Rose L</ForeName>
                    <Initials>RL</Initials>
                    <AffiliationInfo>
                        <Affiliation>Department of Zoology, University of Wisconsin, Madison, WI, 53706, USA.</Affiliation>
                    </AffiliationInfo>
                    <AffiliationInfo>
                        <Affiliation>Department of Neuroscience, University of Wisconsin, Madison, WI, 53706, USA.</Affiliation>
                    </AffiliationInfo>
                </Author>
...

这将导致一个错误:

代码语言:javascript
复制
neo4j.exceptions.CypherTypeError: Type mismatch: expected a map but was List{Map{Affiliation -> String("Department of Zoology, University of Wisconsin, Madison, WI, 53706, USA.")}, Map{Affiliation -> String("Department of Neuroscience, University of Wisconsin, Madison, WI, 53706, USA.")}}

是否有一种方法来签入ON CREATE/MATCH SET大小写,如果这是在赋值之前的地图或列表?

如果识别了一个列表,我想迭代它并设置属性,如affiliation1、affiliation2等,如果可能的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 06:48:02

您可以设置字符串列表,因此在您的python代码中,您必须将这些数据库列表转换为字符串列表。

为什么在这里使用FOREACH,而不使用另一个展开?我不知道你是在哪里创造作者的?

代码语言:javascript
复制
WITH $pubmed_dict as pubmed_article
UNWIND pubmed_article as particle


UNWIND particle.MedlineCitation.Article.AuthorList.Author as author
  MERGE (a:Author {last_name: COALESCE(author.LastName, 'LAST NAME MISSING!')})
  SET a.first_name = author.ForeName, a.affiliation = author.AffiliationInfo.Affiliation
  MERGE (p)<-[:WROTE]-(a)      
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50893486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档