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