2016-08-31 17 views
1

Я пытаюсь импортировать данные из MongoDB в реляционный DB (SQL Server).JSON импортирует вложенный объект в реляционные таблицы с Talend

У меня нет доступа к компонентам MongoDB, поэтому я запрашиваю свою коллекцию с помощью драйвера mongo java в компоненте tJava.

я получаю:

Список < DBObject>

который я посылаю к tExtractJSONFields

Объект моей коллекции выглядит следующим образом:

[ 
 
    { 
 
     "_id":{ 
 
     "$oid":"1564t8re13e4ter86" 
 
     }, 
 
     "object":{ 
 
     "shop":"shop1", 
 
     "domain":"Divers", 
 
     "sell":[ 
 
      { 
 
       "location":{ 
 
        "zipCode":"58000", 
 
        "city":"NEVERS" 
 
       }, 
 
       "properties":{ 
 
        "description":"ddddd!!!!", 
 
        "id":"f1re67897116fre87" 
 
       }, 
 
       "employee":[ 
 
        { 
 
        "name":"employee1", 
 
        "id":"245975" 
 
        }, 
 
        { 
 
        "name":"employee2", 
 
        "id":"458624" 
 
        } 
 
       ], 
 
       "customer":{ 
 
        "name":"Customer1", 
 
        "custid":"test_réf" 
 
       } 
 
      } 
 
     ] 
 
     } 
 
    } 
 
]

Для продажи у меня может быть несколько сотрудников. У меня есть массив сотрудников, и я хочу сохранить пострадавшего сотрудника в другой таблице. Поэтому я хотел бы иметь 2 таблицы:

Sell 
oid    | shop | domain | zipCode | ... 
1564t8re13e4ter86 | shop1 | Divers | 58000 | ... 


Affected employee 
employee_id | employee_name | oid 
245975  | employee1  | 1564t8re13e4ter86 
458624  | employee2  | 1564t8re13e4ter86 

Так что я хочу, чтобы петля на массиве сотрудника, с запросом Jsonpath:

"$ [*] object.sell [0] .employee"

Проблема в том, что, делая это, я не могу иметь object_id. Кажется, что я не могу получить атрибут на родительском узле, если я определяю свой запрос Jsonpath таким образом.

Я также видел, что я могу сделать, как в следующей ссылке: http://techpoet.blogspot.ro/2014/06/dealing-with-nested-documents-in.html?utm_content=buffer02d59&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer

Но я не понимаю, когда он получить object_id на более низких уровнях.

Как я могу это сделать?

+0

Привет, мне кажется, что Xpath может быть лучшим вариантом, поскольку у вас может быть родительский узел, использующий Xpath (я думаю, что это точка или двойная точка для родителя). Идентификатор объекта будет повторяться для каждой строки, но вы его получите. –

+1

К сожалению, Xpath не работает для этого JSON. Я не понимаю, почему, но я пробовал все виды запросов xpath, но без каких-либо успехов ... –

ответ

0

мои тесты с JSONPath не удалось, как хорошо, но я думаю, что это должно быть ошибка в компоненте, потому что когда я запрашиваю:

$ .. [ «$ OID»] Я получаю обратно -> [].

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

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

  • Нет связанных вопросов^_^