Рейтинг:0

Migrate accessing source fields by name instead of by selector?

флаг in

I'm working on the MongoDB source plugin and I'm able to do the migration, but I have to make strange compromises. When defining the source fields, I have to set name the same as selector, like this.

fields:
  -
    name: _id
    label: 'Unique ID'
    selector: _id

That works, but if I decide to change field name and keep selector, the migration fails.

fields:
  -
    name: node_id
    label: 'Unique ID'
    selector: _id

I get this error.

'node_id' is defined as a source ID but has no value.

Why is that? Why is the source array accessed by name instead of by selector?

флаг in
Это сильно зависит от реализации исходного плагина. Например, в исходном коде JSON для migrate_plus селектор — это xpath к данным, а имя — сокращение. Однако для `migrage_source_csv` имя должно быть значением заголовка. У него также есть метка, но нет селектора. Так что вам придется копаться в реализации исходного кода, чтобы увидеть, какие свойства ему нужны и что он делает.
Рейтинг:1
флаг ru

Вы можете изменить имя исходных полей, но вы не должны изменять имя исходных полей, используемых в качестве исходных идентификаторов.

источник:
  поля:
    -
      имя: _id
      label: 'Уникальный идентификатор'
      селектор: _id
  идентификаторы:
    _id: <-- это проблема, вы не можете переименовать исходные поля, используемые здесь
      тип: целое число

При первой миграции модуль создает таблицу сопоставления миграция_карта_MIGRATION_ID для каждой строки удаленного источника <=> локальный объект. После этого вы больше не сможете изменить имя исходных полей, используемых в качестве исходных идентификаторов.

Единственный способ обойти это — полный откат, а затем вручную удалить эти таблицы миграции (включая таблицу migration_message_MIGRATION_ID ), а затем вы можете начать все заново.

флаг in
@hundri спасибо за объяснение. Однако исходный параметр вообще не работает, даже для других полей. Из того, что сказал Джозеф, и из другого источника, я думаю, что исходный плагин сам по себе должен реализовать эту функциональность. Но проблема в том, что я могу найти и инструкции/учебник о том, как это сделать.
Рейтинг:0
флаг in

Селекторы обрабатываются плагинами обработки данных. Первоначально я пытался использовать объект итератора, предоставленный объектом коллекции MongoDB. Это работает, но селекторы не поддерживаются. Затем я увидел, как в модуле Migrate plus создается собственный процессор данных для парсинга json, и сделал его на основе этого. В основном я использую итератор коллекции, чтобы получить полный json, а затем мой собственный процессор данных работает с этим json так же, как это делает процессор данных Migrate Plus json.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.