【问题标题】:Specify order of imports in mongo-connector在 mongo-connector 中指定导入顺序
【发布时间】:2016-02-25 08:34:18
【问题描述】:

我正在为 Python mongo-connector 项目编写 DocumentManager。在第一次运行连接器时,我的所有数据都通过bulk_upsert 函数从 MongoDB 导入到图形数据库 (Neo4J)。但是,数据之间有一些依赖关系,我希望在另一个集合之前导入一个集合。具体来说,我希望在app.playlists 之前导入app.songs,因为后者具有前者的图形边缘。目前mongo-connector 正在执行所有导入,没有任何明显的顺序。有没有办法可以指定订单?如果没有,我自己能做些什么来确保秩序?

【问题讨论】:

    标签: python mongodb neo4j


    【解决方案1】:

    如果您使用 MERGE Cypher statement 和唯一性约束,则导入集合的顺序无关紧要。

    例如:

    假设您的数据如下所示:

    播放列表集合

    {
        "_id': "playlist1",
        "songIds": ["song1, song2, song3"]
    }
    

    歌曲合集

    {
        "_id": "song1",
        "title": "Redemption Song",
        "artist": "Bob Marley"
    }
    

    每个播放列表都有一个唯一的_id,每首歌曲都有一个唯一的_id,这是从播放列表文档中引用的。

    处理这些文档的 Cypher 语句如下所示:

    对于播放列表:

    MERGE (p:Playlist {_id: {_id}})
    UNWIND songIds AS songId
    MERGE (p)<-[:IN_PLAYLIST]-(s:Song {_id: songId})
    

    对于歌曲:

    MERGE (s:Song {_id: {_id}})
    SET s.title = {title},
        s.artist = {artist}
    

    MERGE 本质上是“获取或创建”。这里我们使用MERGE 和歌曲ID,所以如果一个节点不存在给定歌曲ID,它将被创建。如果它已经存在,那么它将绑定到指定的变量。

    确保创建唯一性约束:

    CREATE CONSTRAINT ON (p:Playlist) ASSERT i._id IS UNIQUE;
    CREATE CONSTRAINT ON (s:Song) ASSERT s._id IS UNIQUE;
    

    【讨论】:

    • 我认为这对我没有帮助,因为playlists 中每个song 的信息不足以描述一首完整的歌曲。
    猜你喜欢
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多