MongoDB - структура документа для создания матрицы из нескольких пар значений - PullRequest
1 голос
/ 11 марта 2020

Я новичок в No SQL и MongoDB, поэтому, пожалуйста, не bash. В прошлом я использовал SQL баз данных, но сейчас пытаюсь использовать масштабируемость No SQL. Одно из приложений, которое приходит на ум, - это сбор экспериментальных результатов, где они каким-то образом сериализуются с датой начала, даты окончания, номером детали, серийным номером и т. Д. c. Наряду с каждым экспериментом собирается много «измерений», но список измерений может быть уникальным в каждом эксперименте.

Я ищу идеи о том, как структурировать документ для решения следующих задач:

1) Запрос на основе диапазонов дат, номеров деталей, серийных номеров
2) См. Итоговую таблицу в таблице «электронных таблиц»
3) Выполнить статистические вычисления, возможно с R, для различных «измерений»

Пример может выглядеть следующим образом:

[
  {
    "_id": {
      "$oid": "5e680d6063cb144f9d1be261"
    },
    "StartDate": {
      "$date": {
        "$numberLong": "1583841600000"
      }
    },
    "EndDate": {
      "$date": {
        "$numberLong": "1583842007000"
      }
    },
    "PartNumber": "1Z45NP7X",
    "SerialNumber": "U84A3102",
    "Status": "Acceptable",
    "Results": [
      {
        "Sensor": "Pressure",
        "Value": "14.68453",
        "Units": "PSIA",
        "Flag": "1"
      },
      {
        "Sensor": "Temperature",
        "Value": {
          "$numberDouble": "68.43"
        },
        "Units": "DegF",
        "Flag": {
          "$numberInt": "1"
        }
      },
      {
        "Sensor": "Velocity",
        "Value": {
          "$numberDouble": "12.4"
        },
        "Units": "ft/s",
        "Flag": {
          "$numberInt": "1"
        }
      }
    ]
  },
  {
    "_id": {
      "$oid": "5e68114763cb144f9d1be263"
    },
    "StartDate": {
      "$date": {
        "$numberLong": "1583842033000"
      }
    },
    "EndDate": {
      "$date": {
        "$numberLong": "1583842434000"
      }
    },
    "PartNumber": "1Z45NP7X",
    "SerialNumber": "U84A3103",
    "Status": "Acceptable",
    "Results": [
      {
        "Sensor": "Pressure",
        "Value": "14.70153",
        "Units": "PSIA",
        "Flag": "1"
      },
      {
        "Sensor": "Temperature",
        "Value": {
          "$numberDouble": "68.55"
        },
        "Units": "DegF",
        "Flag": {
          "$numberInt": "1"
        }
      },
      {
        "Sensor": "Velocity",
        "Value": {
          "$numberDouble": "12.7"
        },
        "Units": "ft/s",
        "Flag": {
          "$numberInt": "1"
        }
      }
    ]
  },
  {
    "_id": {
      "$oid": "5e68115f63cb144f9d1be264"
    },
    "StartDate": {
      "$date": {
        "$numberLong": "1583842464000"
      }
    },
    "EndDate": {
      "$date": {
        "$numberLong": "1583842434000"
      }
    },
    "PartNumber": "1Z45NP7X",
    "SerialNumber": "U84A3104",
    "Status": "Acceptable",
    "Results": [
      {
        "Sensor": "Pressure",
        "Value": "14.59243",
        "Units": "PSIA",
        "Flag": "1"
      },
      {
        "Sensor": "Weight",
        "Value": {
          "$numberDouble": "67.93"
        },
        "Units": "lbf",
        "Flag": {
          "$numberInt": "1"
        }
      },
      {
        "Sensor": "Torque",
        "Value": {
          "$numberDouble": "122.33"
        },
        "Units": "ft-lbf",
        "Flag": {
          "$numberInt": "1"
        }
      }
    ]
  }
]

Другой подход может быть следующим:

[
  {
    "_id": {
      "$oid": "5e680d6063cb144f9d1be261"
    },
    "StartDate": {
      "$date": {
        "$numberLong": "1583841600000"
      }
    },
    "EndDate": {
      "$date": {
        "$numberLong": "1583842007000"
      }
    },
    "PartNumber": "1Z45NP7X",
    "SerialNumber": "U84A3102",
    "Status": "Acceptable",
    "Pressure (PSIA)" : "14.68453",
    "Pressure - Flag": "1",
    "Temperature (degF)": "68.43",
    "Temperature - Flag": "1",
    "Velocity (ft/s)": "12.4",
    "Velocity Flag":  "1"
  },
  {
    "_id": {
      "$oid": "5e68114763cb144f9d1be263"
    },
    "StartDate": {
      "$date": {
        "$numberLong": "1583842033000"
      }
    },
    "EndDate": {
      "$date": {
        "$numberLong": "1583842434000"
      }
    },
    "PartNumber": "1Z45NP7X",
    "SerialNumber": "U84A3103",
    "Status": "Acceptable",
    "Pressure (PSIA)" : "14.70153",
    "Pressure - Flag": "1",
    "Temperature (degF)": "68.55",
    "Temperature - Flag": "1",
    "Velocity (ft/s)": "12.7",
    "Velocity Flag":  "1"
  },
  {
    "_id": {
      "$oid": "5e68115f63cb144f9d1be264"
    },
    "StartDate": {
      "$date": {
        "$numberLong": "1583842464000"
      }
    },
    "EndDate": {
      "$date": {
        "$numberLong": "1583842434000"
      }
    },
    "PartNumber": "1Z45NP7X",
    "SerialNumber": "U84A3104",
    "Status": "Acceptable",
    "Pressure (PSIA)" : "14.59243",
    "Pressure - Flag": "1",
    "Weight (lbf)": "67.93",
    "Weight - Flag": "1",
    "Torque (ft-lbf)": "122.33",
    "Torque - Flag": : "1"
  }
]

Пример таблицы может выглядеть (вероятно, с правильным интервалом):

StartDate            EndDate              PartNumber SerialNumber Pressure 'Pressure - Flag' Temperature 'Temperature - Flag' Velocity 'Velocity - Flag' Torque 'Torque - Flag' Weight 'Weight - Flag'
2020-03-10T12:00:00Z 2020-03-10T12:06:47Z 1Z45NP7X   U84A3102     14.68453  1             68.43       1                    12.4     1                  N/A    N/A             N/A      
N/A
2020-03-10T12:07:13Z 2020-03-10T12:13:54Z 1Z45NP7X   U84A3103     14.70153  1             68.55       1                    12.7     1                 N/A    N/A             N/A      
N/A 
2020-03-10T12:07:13Z 2020-03-10T12:13:54Z 1Z45NP7X   U84A3104     14.59243  1               N/A         N/A                  N/A      N/A                  67.93  1               122.33      
1 

Есть мысли о лучшей структуре? В действительности, может быть более 200 «значений датчика».

Спасибо,

DG

...