创建MongoDB动态视图

时间:2016-04-29 12:54:21

标签: mongodb

我是MongoDB的新手,我想知道是否有办法在MongoDB中创建动态视图。

让我更准确一点: 在mongo中,我有一个包含财务数据的集合,以及一个显示数据的GUI界面。 但是每个用户都可以通过向网格添加或删除列来减少数据,并过滤网格:一个经典的用例。

我想做的是根据用户过滤器为每个听取主表的用户创建一个集合:如下所示:

mongo.createView(masterCollection, filters, mapReduce)

在这种情况下,每次在主集合中进行修改(更新,删除,插入)时,mongo都会更新每个视图。

我可以做这样的事情:为用户创建一个表,并使用用户过滤器和mapReduce在我的主集合上使用tailable游标,以及添加,删除或更新用户集合中的文档。

但是,我有多达100个并发用户,它会在主要集合上打开并保持100个可用游标。我不太了解mongo,但我认为做这样的事情不是最好的做法。

Actualy我根据用户过滤器,每5个secondes为每个用户提供一个获取数据的线程。

如果有一种原生的mongo方式来处理这种情况或者在mongo中创建用户视图的方法,请你现在就告诉我。

谢谢

2 个答案:

答案 0 :(得分:2)

MongoDB v3.4(社区和企业版)开始,支持从现有集合或其他视图创建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

答案 1 :(得分:0)

MongoDB Enterprise有一个名为“单一视图”的功能。实现数据库视图。它更多地用于聚合来自多个表格的数据(例如,父/子关系),并且可能比您正在寻找的更多,但值得一试。缺点是,它只能在昂贵的企业版中使用。

查看the description here