mongodb $ раскрутить с тремя вложенными массивами - PullRequest
0 голосов
/ 20 декабря 2018

Мои данные имеют несколько вложенных уровней: 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

1 Ответ

0 голосов
/ 20 декабря 2018

Не оправдывает ваши ожидания, я догадался, что это может вам помочь

     `db.modulestore.structures.aggregate([
  {
    "$unwind": "$blocks"
  },
  {
    "$unwind": "$fields.children"
  },
  {
    "$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"
    }
  }
]` )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...