指定mongo-connector中的导入顺序

时间:2016-02-25 08:34:18

标签: python mongodb neo4j

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

1 个答案:

答案 0 :(得分:0)

如果您使用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;