【问题标题】:how to remove property duplicates inside Neo4j如何删除 Neo4j 中的重复属性
【发布时间】:2020-03-25 11:14:17
【问题描述】:

我是Neo4j 的新手,我正在尝试学习它以便为我的论文启动一个项目,我花了很多时间手动将大型数据集从 xml 重新组织为 csv,然后我导入了一个Neo4j 中的这个数据库的一部分,我会避免那些重复但我找不到合适的查询,你能帮我吗?

谢谢! 请告诉我您是否需要了解有关此数据库或其他内容的任何信息以更好地了解情况。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    这是确保dedicateePersonId 列表具有不同值的一种方法:

    MATCH (p:Person)
    UNWIND p.dedicateePersonId AS id
    WITH p, COLLECT(DISTINCT id) AS ids
    SET p.dedicateePersonId = ids
    

    [更新]

    如果只有一个属性需要调整,但对于多个属性非常不合适(过于复杂和低效),上述方法就足够了。

    这是一种更好的方法(使用函数apoc.create.setProperty 和apoc.coll.toSet)来更新任意数量的属性键的值。 keys 假定为 parameter,其中包含要更新的属性的名称。

    MATCH (p:Person)
    UNWIND $keys AS k
    CALL apoc.create.setProperty(p, k, apoc.coll.toSet(p[k])) YIELD node
    RETURN DISTINCT node
    

    【讨论】:

    • 好的,这就是问题所在,您的查询在一些属性方面有效,但我不得不写一个很长的查询,运行两周后我决定停止,因为没有工作。这是我尝试过的:textuploader.com/1qptp!有什么建议吗?
    • 对许多属性使用相同的方法非常效率低下。查看我的答案的更新。
    • 我再次重新更新了我的答案,以展示一种简洁的方式来做你想做的事。你只需要传递一个你想要被触摸的属性的名称列表。
    • 我做了这个: :param keys => ["artistPersonId","printerInfo"] (我只选择了几个属性来尝试)然后执行这个查询: MATCH (o:Work) UNWIND $keys AS k CALL apoc.create.setProperty(o, k, apoc.coll.toSet([k])) YIELD node RETURN DISTINCT node 我还在等它,顺便说一句,你能告诉我里面的“n”是什么吗“(n[k]))”代表什么?非常感谢。编辑,运行过程中黑屏,你能帮忙吗?有什么我做错了吗?
    • 数据库无法启动:数据库 [database-9f155ccd-8c85-4fcd-8b84-5a9e9dfd070e] 'v3.5.14' 退出,状态为 'KILLED'。检查日志
    猜你喜欢
    • 1970-01-01
    • 2016-12-25
    • 2012-08-12
    • 2018-11-04
    • 2015-07-26
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多