2016-04-29 4 views
0

Я новичок в MongoDB, и мне хотелось бы знать, есть ли способ создать динамический вид внутри MongoDB.Создать MongoDB Dynamic view

Позвольте мне уточнить: В монго у меня есть коллекция с финансовыми данными и интерфейс GUI, который отображает данные. Но каждый пользователь мог бы уменьшить данные, добавив или удалив столбцы в сетку и отфильтровывая сетку: классический usecase.

Что я хотел бы сделать, это создать коллекцию для каждого пользователя, что слушать мастер-таблицу, в соответствии с фильтрами пользователей: что-то вроде этого:

mongo.createView(masterCollection, filters, mapReduce) 

В этом случае Монго обновление каждый view, каждый раз, когда модификация выполняется в основной коллекции (обновление, удаление, вставка).

Я мог бы сделать что-то вроде этого вручную: создать таблицу для пользователя и использовать хвостовой курсор в моей мастер-коллекции с пользовательскими фильтрами и mapReduce, а также добавлять, удалять или обновлять документ в пользовательской коллекции.

Но у меня есть до 100 одновременных пользователей, и он откроет и сохранит 100 завершенных курсоров в первичной коллекции. Я не знаю достаточно монго, но я думаю, что это не лучшая практика, чтобы сделать что-то подобное.

Actualy У меня есть поток для каждого пользователя, который получает данные для коллекции в соответствии с пользовательскими фильтрами каждые 5 секунд.

Не могли бы вы отпустить меня сейчас, если есть собственный способ монго, чтобы справиться с этим сценарием или способ создать пользовательский вид в монго.

Спасибо

+0

Начиная с версии 3.2.6 MongoDB не предлагает представления на уровне базы данных. – Philipp

ответ

0

MongoDB Enterprise имеет функцию под названием 'Single View', который реализует представления базы данных. Это больше для агрегирования данных из нескольких таблиц (например, отношений родителя/ребенка) и может быть больше, чем вы ищете, но стоит проверить. Недостатком является то, что он доступен только в ценовом издании Enterprise.

Заканчивать the description here

+0

Использование корпоративного издания для меня не является вариантом. Я найду другой способ сделать это. Nerver тем меньше, спасибо Филиппу и Hascut за ответ – zouroto

+0

@zouroto Ссылка, приведенная здесь, представляет собой типичный * случай использования * для MongoDB («создание единого представления данных»), а не конкретную функцию.Этот вариант использования не зависит от версии Enterprise MongoDB. MongoDB 3.4 добавила поддержку для создания [просмотров только для чтения] (https://docs.mongodb.com/manual/core/views/), которая является стандартной функцией, доступной как в сообществах, так и в Enterprise выпусках MongoDB. – Stennie

1

Начиная с MongoDB v3.4 (Enterprise Edition сообщества и), есть поддержка для создания read only views из существующих коллекций или других представлений. Эта функция использует MongoDB aggregation pipeline.

Чтобы создать вид из mongo shell, вы могли бы сделать:

db.createView(<view>, <source>, <pipeline>, <collation>) 

Использование сценария выше, вы можете создать:

db.createView(<"user_view_name">, <"source_collection_name">, <"aggregation pipeline operators">) 

Показать все доступные Aggregation Pipeline Operators - то есть не только вы могли бы фильтр, вы также можете изменить структуру документа.

Для получения дополнительной информации см. MongoDB Views behaviour.