【问题标题】:Create MongoDB Dynamic view创建 MongoDB 动态视图
【发布时间】:2016-04-29 12:54:21
【问题描述】:

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

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

我想做的是根据用户过滤器为每个收听主表的用户创建一个集合:像这样:

mongo.createView(masterCollection, filters, mapReduce)

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

我可以手动执行类似的操作:为用户创建一个表,并使用用户过滤器和 mapReduce 在我的主集合上使用可尾光标,并在用户集合中添加、删除或更新文档。

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

实际上,根据用户过滤器,每 5 秒,我为每个用户获取收集数据的线程。

如果有本地 mongo 方法来处理这种情况或在 mongo 中创建用户视图,请告诉我。

谢谢

【问题讨论】:

  • 从 3.2.6 版开始,MongoDB 不提供数据库级别的视图。

标签: mongodb


【解决方案1】:

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 了解更多信息。

【讨论】:

    【解决方案2】:

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

    查看the description here

    【讨论】:

    • 使用企业版不是我的选择。我会找到另一种方法来做到这一点。越紧张越好,感谢 Philipp 和 Hascut 的回答
    • @zouroto 此处提供的链接指向 MongoDB 的典型用例(“构建单一数据视图”),而不是特定功能。此用例不依赖于 MongoDB 的企业版。 MongoDB 3.4 增加了对创建 read-only views 的支持,这是 MongoDB 社区版和企业版都提供的标准功能。
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 2016-03-27
    • 2011-02-12
    • 2013-07-06
    • 2012-08-16
    • 2015-05-02
    相关资源
    最近更新 更多