如何在Java中连接到MongoDB而不在URL中指定数据库名称?

时间:2016-06-06 10:16:10

标签: java mongodb mongodb-java nosql

我正在使用以下mongodb驱动程序。

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.0.2</version>
</dependency>

这是我的联系方式

String textUri = "mongodb://<username>:<password>@ds027155.mlab.com:27155/";
MongoClientURI uri = new MongoClientURI(textUri);
MongoClient m = new MongoClient(uri);

我收到错误。但是,如果我提到数据库名称

String textUri = "mongodb://<username>:<password>@ds027155.mlab.com:27155/<db-name>";

它没有任何问题。实际上我想列出服务器上的所有数据库。 我如何在不指定数据库名称的情况下提及uri?

另外,我如何仅列出数据库中存在的用户定义集合。

MongoDatabase db = m.getDatabase("standupmeetingnotes");

ListCollectionsIterable<Document> listColl = db.listCollections();

MongoIterable<String> colls = db.listCollectionNames();

for (String s : colls) {
    System.out.println(s);
}

打印 objectlabs-system , 的 objectlabs-system.admin.collections 下, system.indexes 也是系统定义的集合,与用户定义的集合不同。

我能以任何方式省略这些吗?

感谢。

1 个答案:

答案 0 :(得分:0)

回答主题中的问题:“如何在Java中连接到MongoDB而不在URL中指定数据库名称?”。我创建了使用API​​ 3.2.2连接到MongoDB的简单类。并阅读数据库列表。

显然,有两种方法可以连接到MongoDB实例 - 使用URL而不使用URL。在以前的版本中,有一种方法可以使用没有URL的用户名和密码连接到数据库(实例内),但是在3.2.2中,不再可能。 (我应该承认,MongoDB团队改变他们的Java API的速度真的非常了不起。)

无论如何,无论是否使用用户名/密码,该课程都同样有效(前提是可以访问Mongo w / o密码)。并且DB连接步骤可以在连接建立后的稍后时间执行。

grep -oP '"body":"\K[^"]+' <<< '"body":"SOME MESSAGE"'

SOME MESSAGE