2016-02-25 3 views
0

Я работаю над написанием DocumentManager для проекта Python mongo-connector. При первом запуске соединителя все мои данные импортируются из MongoDB в базу данных графиков (Neo4J) функцией bulk_upsert. Однако данные имеют некоторые зависимости между собой, и я хотел бы, чтобы одна коллекция была импортирована до другой. Конкретно, я бы хотел, чтобы app.songs был импортирован до app.playlists, поскольку последний имеет грани графа к первому. В настоящее время mongo-connector делает все импорт без видимого порядка. Есть ли способ указать заказ? Если нет, что я могу сделать для обеспечения порядка?Укажите порядок импорта в mongo-connector

ответ

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 с идентификаторами песни, поэтому, если узел не существует с указанным идентификатором песни, он будет создан. Если он уже существует, он будет привязан к указанной переменной.

Обязательно создать ограничение уникальности:

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

Я не думаю, что это помогло бы мне, потому что информация о каждом 'song' в' playlists' не достаточно, чтобы описать всю песню. – Ali

Смежные вопросы