Разработка меры подсчета количества элементов в свойстве массива MongoDB в кубе. js - PullRequest
1 голос
/ 01 апреля 2020

Я использую куб. js с MongoDB через MongoDB Connector для BI и MongoBI Driver и пока все хорошо. Я хотел бы иметь куб. js числовой мера , который считает длину элемента из массива MongoDB вложенного свойства объекта. Что-то вроде:

{
  "nested": {
    "arrayPropertyName": [
      {
        "name": "Leatha Bauch",
        "email": "Leatha.Bauch76@hotmail.com"
      },
      {
        "name": "Pedro Hermiston",
        "email": "Pedro76@hotmail.com"
      }
    ]
  }
}

Я не мог понять это, глядя на документы, и мне было интересно, возможно ли это вообще.

Я пытался с type: count:

    MyNestedArrayPropertyCounter: {
      sql: `${CUBE}.\`nested.arrayPropertyName\``,
      type: `count`,
      format: `number`,
    },

но я получаю

Error: Error: Unknown column 'nested.arrayPropertyName' in 'field list'

Любая помощь / совет действительно приветствуется. Спасибо

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

BI рассматривает вложенные массивы как отдельные реляционные таблицы. См. https://www.mongodb.com/blog/post/introducing-the-mongodb-connector-for-bi-20

Вот почему вы получаете неизвестную ошибку столбца, она не является частью родительской таблицы документов.

Так что я думаю, вам нужно построить схему на вложенном массив, а затем построить счетчик мер с измерением по идентификатору родительского объекта.

Надеюсь, он остановится.

0 голосов
/ 12 апреля 2020

Я следовал совету Михаила Паршина и вот мои выводы и результаты для преодоления проблемы:

  1. LEFT JOIN подход с кубом. js присоединяется . Я обнаружил, что он мучительно медленный и большую часть времени он заканчивается в тайм-ауте, даже когда запросы выполнялись через командную строку SQL клиентов;

  2. Запуск mongosqld с - предсоединение флаг. Это был лучший вариант, поскольку mongosqld автоматически добавляет столбцы / свойства основной таблицы во вторичные таблицы, что позволяет вам удобно запрашивать куб. js измеряет без присоединения к вторичному Cube ;

  3. Написал сценарий mon go, который извлекает / повторяет / просчитывает c и сохраняет nested.arrayPropertyName в отдельном свойстве документов коллекции.

Заключение

Опуская опцию 1, опция 3 значительно превосходит опцию 2, как правило, менее секунды против более чем 20 секунд на моем локальном компьютере. Я сравнил оба варианта с одним и тем же показателем , разными timeDimension диапазонами и гранулярностью.

Скорее всего, я включу предварительный расчет числа массивов в mon go back-document конец сохраняющейся логики c.

...