Вы можете сделать это с помощью $unwind
в массиве updates
, отсортировав результирующие документы с помощью date
, а затем $group
объединив их на _id
, используя отсортированный порядок.
db.servers.aggregate(
{$unwind: '$service.apps.updates'},
{$sort: {'service.apps.updates.date': 1}},
{$group: {_id: '$_id', 'updates': {$push: '$service.apps.updates'}}},
{$project: {'service.apps.updates': '$updates'}})
Это - много данных для потоковой передачи в браузер. Flash или диаграммы Flex являются, вероятно, единственным решением, которое будет эффективной памятью. Построение диаграммы JavaScript склоняется к разбивке для больших наборов данных.
Другая опция генерирует формы сигнала на серверной стороне с GD или RMagick. Но получение удачи RubyGD скомпилировать.
При отображении аудио формы сигнала Вы захотите сделать своего рода снижение объема данных на исходных данных, потому что обычно существует больше доступных данных в звуковом файле, чем пиксели на экране. Большинство аудио редакторов создает отдельный файл (названный пиковым файлом или файлом обзора), который хранит подмножество аудиоданных (обычно пики и долины формы сигнала) для использования на различных уровнях масштабирования. Затем, поскольку Вы увеличиваете масштаб мимо определенного момента, Вы начинаете ссылаться на сами необработанные аудиоданные.
Вот некоторые хорошие статьи об этом:
Создайте аудио дисплей формы сигнала
Насколько исходный код идет, я рекомендовал бы просмотреть исходный код Смелости. Дисплей формы сигнала смелости довольно хорош, и главным образом вероятный делает подобный вид снижения объема данных при рендеринге форм сигнала.
Обработка часто используется для визуализации, и у нее есть порт Ruby: