Как получить (объединить) все свойства в документах без схемы, которые имеют несколько уровней вложенных / встроенных документов - PullRequest
1 голос
/ 29 февраля 2020

В классе у меня есть набор разнородных документов. Документы имеют общие свойства, но не другие, и я заранее не знаю, какие свойства они имеют. Может быть так, что у одного документа есть свойства A, B, D, у другого - D, F, G, H и так далее. Кроме того, некоторые могут иметь вложенные документы и разные уровни, и мы также не знаем этого заранее. Возможно, один документ имеет свойство X, а X - это список вложенных документов, каждый из которых имеет свою собственную схему.

Как получить список объединения всех свойств документов, включая внедренные?

Например, для следующего:

Document 1 has properties A,B,D

Document 2 has properties A,D,F,G,H

Document 3 has properties X,Y

where X is a list of nested documents:
Document 3.1 has properties a,g,h
Document 3.2 has properties a,g,h,i,j,k

And k is again a list of nested documents: 
Document 3.2.1 has properties bb,cc,dd 
Document 3.2.2 has properties cc,dd,ee

Итак, я должен получить все свойства, включая вложенные, так:

A,B,D,F,G,H,X,Y
And under X there should be: X.a,X.g,X.h,X.i,X.j,X.k
And under X.k there should be: X.k.bb,X.k.cc,X.k.dd,X.k.ee

Кроме того, как мне прикрепить первые значения Z доступны из фактических документов для каждого свойства, объединяя их в строку, ограниченную каким-либо символом, скажем «|». Итак, как мне получить таблицу или JSON файл следующего формата, если мне нужны первые два доступных значения:

A                ValueFromDoc1|ValueFromDoc2
B                ValueFromDoc1OnlyBecOnlyThisDocHasThisValue
D                ValueFromDoc1|ValueFromDoc2
... (truncated) ...
X.a              ValueFromDoc3.1|ValueFromDoc3.2
... (truncated) ...
X.k.cc           ValueFromDoc3.2.1|ValueFromDoc3.2.2
X.k.dd
X.k.ee
Y

Чего я пытаюсь достичь: В тех случаях, когда у нас есть разнородный набор документов без предопределенной схемы, это было бы очень полезно, чтобы понять, что ВСЕ свойства в этом классе. И иногда идентификатор, используемый для идентификации свойства, недостаточен для того, чтобы человек понял, что это значит, поэтому мне нужен примерный набор значений для его получения. Весьма вероятно, что вы заранее не узнаете, что это за схема, когда используете автоматически сгенерированный ETL, сценарий хранилища или сценарий веб-оболочки.

...