У меня есть REST-сервер, который подключен к mongoDB.
В моей БД есть коллекция с кучей тестов в такой форме:
{
name: 'xxx',
date: 'xxx',
props: [
{
role: 1,
commands: [
{
command: 'xxx',
data: [
{
timestamp: 'xxx',
cpu: 1,
ram: 5
},
{
timestamp: 'xxy',
cpu: 2,
ram: 3
}
]
}
]
}
]
}
Коллекция огромна или, по крайней мере, потенциально может быть.
Props
- может содержать до 3 объектов
Props.commands
- может содержать до 30 объектов
Props.commands.data
- может содержать до 20 объектов
Должен ли я предварительно рассчитать средние значения и сохранить их на каждом вложенном уровне или использовать статистическую функцию, которую Mongo предлагает для расчета их на основе потребностей?
Я пытался использовать вложенный $unwind's
для одного документа, который уже занимал огромное время обработки, что имеет смысл, учитывая объем данных.
Мне интересно, было бы разумнее просто хранить средние значения для каждого уровня при добавлении документов в коллекцию вместо их вычисления после использования функции агрегирования MongoDB.
Конечной целью будет фильтрация данных с использованием $match
, а затем агрегирование процессора и оперативной памяти на основе этого с самым быстрым из возможных методов.
Я довольно новичок в Mongo и поэтому имею очень ограниченный опыт работы с конвейером и возможностями агрегации, поэтому любые советы будут приветствоваться.
Спасибо!