2

的文档MongoClient说有人可能会说“host=”并给出完整的 MongoDB URI。其中包括数据库名称。一旦我这样做了,有没有办法从 MongoClient 对象中提取数据库名称?我没有在源代码中发现它。

4

2 回答 2

5

我相信您正在寻找的内容可以在pymongo.uri_parser. 特别是看一下parse_uri函数。parse_uri将 MongoDB URI 作为参数并返回包含值的字典,例如username,password和最重要的database.

例子:

from pymongo.uri_parser import parse_uri

mongo_uri = 'mongodb://james:brewer@localhost/test'

for k, v in parse_uri(mongo_uri).items():
    print k, ':', v

将打印

username : james
nodelist : [('localhost', 27017)]
database : test
connection : None
password : brewer
options : {}

希望这可以帮助!

于 2013-02-19T03:58:01.437 回答
2

该类MongoClient有一个称为get_default_database(default=None, [...other options...])记录为的方法:

获取 MongoDB 连接 URI 中命名的数据库。

MongoClient还有一个名为 的方法.get_database(name=None, [... other options...]) ,其中name=None参数定义为:

name(可选):数据库的名称 - 一个字符串。如果 None (默认值),则返回 MongoDB 连接 URI 中命名的数据库。

因此,如果您只有 URI,但该 URI 包含数据库名称,您可以像这样获取 MongoDB 数据库:

    mongo_database = pymongo.MongoClient(host=mongo_uri).get_default_database()

或者像这样:

    mongo_database = pymongo.MongoClient(host=mongo_uri).get_database()

default=上面第一个方法中的参数name=和第二个方法中的参数执行相同的功能:允许应用程序程序员覆盖 URI 中指定的数据库,或者如果 URI 中没有提供数据库,则对其进行补充。

于 2021-01-08T21:58:23.573 回答