Мои данные имеют несколько вложенных уровней: root -> blocks -> children -> "массив строк"
Я хочу использовать агрегат с $ unwind для вывода некоторых полей из "блоков"уровень и самый низкий уровень, «массив строк».
Мой вопрос: Каков код использования агрегата с $ unwind для вывода этих полей на основе приведенной ниже диаграммы данных?
Fields from BLOCKS
block_id
block_type
definition
All entries from the lowest level array of strings
Это отличается от других сообщений, которые я обнаружил, потому что я хочу, чтобы некоторые уровни пропускались, а также потому, что у двух нижних уровней нет имен.
Дублирующие строки в выводе не являются предпочтительными, но яможет дедуплицировать на более позднем этапе.
Я загрузил изображение структуры данных.Если вы видите изображение, вокруг полей, которые я хочу, есть синяя рамка.
Using "MongoDB Compass", I can see this structure
ROOT ARRAY
_id
edited_on
-->BLOCKS ARRAY (array of type object)
block_id
block_type
definition
edit_info (object)
edited_on
fields (object)
display_name
-->CHILDREN ARRAY (array of type array)
-->ARRAY (array of type string)
0: string
1: string
Первые два массива имеют имена «блоки» и «дети».Последние два массива не имеют имен.
Это может помочь.У меня уже есть запрос с $ unwind, который дает мне несколько полей с уровнями root и block.
mongo.exe MyDatabase --quiet --eval "printjson (db.modulestore.structures.aggregate ({$ unwind: '$ blocks'}, {$ project: {_id: 1, edited_on): 1, 'definition': '$ blocks.definition', 'block_type': '$ blocks.block_type', 'block_id': '$ blocks.block_id', 'block_edited_on': '$ blocks.edit_info.edited_on', 'display_name ':' $ blocks.fields.display_name '}}, {$ match: {block_type:' openassessment '}}) .toArray ()) "> C: \ Data \ MyOutput.json