Куб Js | Как объединить две таблицы, созданные из массивов MongoDB? - PullRequest
1 голос
/ 20 января 2020

Я новичок в кубе. js и столкнулся с проблемой, может быть, кто-то сможет мне помочь. Я не нашел ничего очень полезного в inte rnet ... Вот пример документа o в моей коллекции:

{ 
    "_id" : ObjectId("5a835e0000f73b69c100f15c"), 
    "studyDescription" : "xxxxxxxx", 
    "observations" : [
        {
            "_id" : "1JELIZY6QSAGW",  
            "state" : "validated", 
            "stateBy" : "user@xxx.com", 
            "stateAt" : ISODate("2019-10-22T15:06:48.133+0000"), 
            "created" : ISODate("2019-10-22T15:06:48.133+0000"), 
            "createdBy" : "user@xxx.com", 
            "history" : [
                {
                    "author" : "user@xxx.com", 
                    "role" : "ADMIN", 
                    "state" : "validated", 
                    "tsp" : ISODate("2019-10-22T15:06:48.133+0000")
                }
            ]
        }
    ]
}

Моя коллекция содержит исследования, и каждое исследование содержит несколько наблюдений. Каждое наблюдение может быть просмотрено одним или несколькими рецензентами, и эта информация содержится в массиве «история». Мне нужно сделать несколько отчетов, поэтому мне посоветовали использовать куб. js. Проблема в том, что мне нужно отфильтровать некоторые из моих графиков с данными, содержащимися в массивах, и для этого мне нужно сделать несколько объединений. Моя проблема в том, что массив «наблюдения» не содержит идентификатора исследования, а массив «история» не содержит ни идентификатора исследования, ни идентификатора наблюдений, тогда как мне нужно было бы объединить таблицы и отфильтровать, например, по автору. Я не могу присоединиться к ним, за исключением случаев, когда я изменяю коллекцию в базе данных, чтобы добавить информацию, что, к сожалению, не вариант в моем случае ...

У вас была бы идея сделать это объединение возможным?

Большое спасибо за вашу помощь

1 Ответ

1 голос
/ 24 января 2020

Вложенные документы представлены в виде связанных таблиц с помощью Mon go BI-коннектора. В вашем случае будут следующие таблицы:

  1. исследования
  2. Studies_observations
  3. Studies_observations_history

В этом случае Cube. js Схема будет выглядеть следующим образом:

cube(`Studies`, {
  sql: `select * from studies`,

  joins: {
    Observations: {
      sql: `${Studies}._id = ${Observations}._id`,
      relationship: `hasMany`
    }
  },

  measures: {
    count: {
      type: `count`
    }
  },

  dimensions: {
    id: {
      sql: `_id`,
      type: `string`,
      primaryKey: true
    }
  }
});

cube(`Observations`, {
  sql: `select * from studies_observations`,

  joins: {
    History: {
      sql: `${Observations}._id = ${History}._id AND ${Observations}.observations_idx = ${History}.observations_idx`,
      relationship: `hasMany`
    }
  },

  dimensions: {
    id: {
      sql: `CONCAT(${CUBE}._id, ${CUBE}.observations_idx)`,
      type: `string`,
      primaryKey: true
    }
  }
});

cube(`History`, {
  sql: `select * from studies_observations_history`,

  dimensions: {
    id: {
      sql: `CONCAT(${CUBE}._id, ${CUBE}.observations_idx, ${CUBE}.\`observations.history_idx\`)`,
      type: `string`,
      primaryKey: true
    },

    author: {
      sql: `${CUBE}.\`observations.history.author\``
    }
  }
})

Подробнее о Пн go Схема массивов BI и Cube. js объединения .

...