【问题标题】:Creating a MongoDB View using the Java driver使用 Java 驱动程序创建 MongoDB 视图
【发布时间】:2018-01-02 11:20:09
【问题描述】:

如何在 mongo db 中创建一个可以公开集合中所有文档的视图?我使用了以下代码:

java.util.List<Bson> tstL = new ArrayList<>();
db.createView("tst_view","collection_name",tstL);

我正在尝试使用管道的空列表,但它不起作用。你能帮忙吗?

【问题讨论】:

  • 你能具体说明“它不起作用”是什么意思吗? createView 方法会抛出异常吗? createView 方法是否成功完成,但是当您尝试使用视图时,视图不存在?您提供的详细信息越多,别人帮助您的机会就越大。
  • 也许“问题”是目标数据库中似乎不存在该视图?如果是这样,那是因为视图是在读取操作期间按需计算的。视图不像集合那样具体化,而是目标数据库将包含system.views 中定义您的视图的文档,您将能够使用此视图 - 通过 Mongo Java 驱动程序 - 与使用集合的方式大致相同.
  • createView 失败,因为我不能使用空列表作为管道。但是如果我不想在任何条件下过滤,我不明白管道应该是什么。我只想在视图中公开集合中的所有数据。
  • 我可以使用 mongodb-driver-3.5.0.jar 成功调用createView("a", "b", new ArrayList&lt;&gt;())。您能否具体说明“失败”的含义?驱动程序会抛出异常吗?如果是这样,您能否更新您的问题以包含堆栈跟踪?
  • 谢谢。有效。我之前有超时问题。当我登录其中一个节点时,我可以看到它在连接到 mongodb 时超时。

标签: mongodb mongodb-java mongodb-java-3.3.0


【解决方案1】:
    database.createView("Tree", "Node", asList(
            new Document("$graphLookup",
                    new Document("from", "Node")
                            .append("startWith", "$childrenRefs")
                            .append("connectFromField", "childrenRefs")
                            .append("connectToField", "_id")
                            .append("as", "children")
            )
    ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2018-12-17
    • 2016-12-07
    • 1970-01-01
    相关资源
    最近更新 更多