Я хочу сохранить данные датчика GY-91 в базе данных MongoDB.
У меня есть данные в следующих двух макетах:
ag {'y': {'out': -0.013, 'max': -0.007, 'min': -0.016, 'avg': -0.0108, 'in': -0.009},
'x': {'out': -0.217, 'max': -0.208, 'min': -0.221, 'avg': -0.2142, 'in': -0.213},
'z': {'out': 0.991, 'max': 1.002, 'min': 0.983, 'avg': 0.9937, 'in': 0.993}}
gd {'y': {'out': 0.79, 'max': 1.4, 'min': 0.79, 'avg': 1.0717, 'in': 1.04},
'x': {'out': 0.67, 'max': 0.85, 'min': 0.37, 'avg': 0.619, 'in': 0.37},
'z': {'out': 0.98, 'max': 1.16, 'min': 0.49, 'avg': 0.8582, 'in': 0.79}}
mt {'y': {'out': 154.3, 'max': 155.9, 'min': 151.6, 'avg': 154.025, 'in': 154.6},
'x': {'out': 24.6, 'max': 26.0, 'min': 23.0, 'avg': 24.6325, 'in': 25.0},
'z': {'out': -19.5, 'max': -18.1, 'min': -22.1, 'avg': -19.6175, 'in': -19.2}}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ag {'out': {'y': -0.013, 'x': -0.217, 'z': 0.991},
'max': {'y': -0.007, 'x': -0.208, 'z': 1.002},
'min': {'y': -0.016, 'x': -0.221, 'z': 0.983},
'avg': {'y': -0.0108, 'x': -0.2142, 'z': 0.9937},
'in': {'y': -0.009, 'x': -0.213, 'z': 0.993}}
gd {'out': {'y': 0.79, 'x': 0.67, 'z': 0.98},
'max': {'y': 1.4, 'x': 0.85, 'z': 1.16},
'min': {'y': 0.79, 'x': 0.37, 'z': 0.49},
'avg': {'y': 1.0717, 'x': 0.619, 'z': 0.8582},
'in': {'y': 1.04, 'x': 0.37, 'z': 0.79}}
mt {'out': {'y': 154.3, 'x': 24.6, 'z': -19.5},
'max': {'y': 155.9, 'x': 26.0, 'z': -18.1},
'min': {'y': 151.6, 'x': 23.0, 'z': -22.1},
'avg': {'y': 154.025, 'x': 24.6325, 'z': -19.6175},
'in': {'y': 154.6, 'x': 25.0, 'z': -19.2}}
Поскольку я буду хранить1 выборка в секунду (все ag
, gd
и mt
в одном документе с временными метками), я буду использовать много агрегации для анализа данных.
По этой причине я исключилследующие три макета (первый был моим любимым из-за его космической эффективности).Это потому, что мне тогда пришлось бы использовать $unwind
, $arrayElemAt
или некоторые другие методы для доступа к элементам x, y, z.
ag [[-0.218, -0.22, -0.2142, -0.208, -0.21],
[-0.009, -0.016, -0.0111, -0.006, -0.013],
[0.989, 0.986, 0.9941, 1.001, 0.989]]
gd [[0.67, 0.37, 0.6133, 0.98, 0.37],
[1.04, 0.79, 1.121, 1.46, 1.28],
[0.79, 0.37, 0.819, 1.1, 0.73]]
mt [[24.6, 22.2, 24.5375, 26.4, 25.3],
[154.6, 151.7, 153.89, 155.7, 153.9],
[-19.9, -21.3, -19.46, -17.7, -19.5]]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ag [{'out': -0.21, 'max': -0.208, 'min': -0.22, 'avg': -0.2142, 'in': -0.218},
{'out': -0.013, 'max': -0.006, 'min': -0.016, 'avg': -0.0111, 'in': -0.009},
{'out': 0.989, 'max': 1.001, 'min': 0.986, 'avg': 0.9941, 'in': 0.989}]
gd [{'out': 0.37, 'max': 0.98, 'min': 0.37, 'avg': 0.6133, 'in': 0.67},
{'out': 1.28, 'max': 1.46, 'min': 0.79, 'avg': 1.121, 'in': 1.04},
{'out': 0.73, 'max': 1.1, 'min': 0.37, 'avg': 0.819, 'in': 0.79}]
mt [{'out': 25.3, 'max': 26.4, 'min': 22.2, 'avg': 24.5375, 'in': 24.6},
{'out': 153.9, 'max': 155.7, 'min': 151.7, 'avg': 153.89, 'in': 154.6},
{'out': -19.5, 'max': -17.7, 'min': -21.3, 'avg': -19.46, 'in': -19.9}]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ag {'max': [-0.208, -0.006, 1.001],
'out': [-0.21, -0.013, 0.989],
'avg': [-0.2142, -0.0111, 0.9941],
'min': [-0.22, -0.016, 0.986],
'in': [-0.218, -0.009, 0.989]}
gd {'max': [0.98, 1.46, 1.1],
'out': [0.37, 1.28, 0.73],
'avg': [0.6133, 1.121, 0.819],
'min': [0.37, 0.79, 0.37],
'in': [0.67, 1.04, 0.79]}
mt {'max': [26.4, 155.7, -17.7],
'out': [25.3, 153.9, -19.5],
'avg': [24.5375, 153.89, -19.46],
'min': [22.2, 151.7, -21.3],
'in': [24.6, 154.6, -19.9]}
Итак, какой из первых двух макетов будет лучше?Может быть, также в контексте добавления индексов для более быстрого запроса?
Данные будут в основном запрашиваться, чтобы затем их можно было отобразить на графике d3 (библиотека Javascript).
Или, возможно, следуетЯ сплющил все, поэтому в каждом документе есть записи типа
{'ag_x_min': value, 'ag_y_max': value, 'gd_x_avg': value, ...}