mongo_client --连接MongoDB的工具

连接到MongoDB的工具。

参见

高可用性和PyMongo 以获取连接到副本集或mongos服务器集的示例。

得到一个 Database 实例 MongoClient 使用字典样式或属性样式访问:

>>> from pymongo import MongoClient
>>> c = MongoClient()
>>> c.test_database
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), u'test_database')
>>> c['test-database']
Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), u'test-database')
class pymongo.mongo_client.MongoClient(host='localhost', port=27017, document_class=dict, tz_aware=False, connect=True, **kwargs)

MongoDB实例、副本集或一组Mongose的客户端。

客户机对象是线程安全的,并且内置了连接池。如果操作因网络错误而失败, ConnectionFailure 引发,客户端在后台重新连接。应用程序代码应处理此异常(识别操作失败),然后继续执行。

这个 host parameter can be a full mongodb URI ,以及一个简单的主机名。它也可以是主机名或uri的列表。主机字符串中指定的任何端口都将重写 port 参数。如果传递了多个包含数据库或身份验证信息的mongodb uri,则将使用最后一个存在的数据库、用户名和密码。对于用户名和密码,诸如“:”、“/”、“+”和“@”等保留字符必须按照RFC 2396进行百分比编码:

try:
    # Python 3.x
    from urllib.parse import quote_plus
except ImportError:
    # Python 2.x
    from urllib import quote_plus

uri = "mongodb://%s:%s@%s" % (
    quote_plus(user), quote_plus(password), host)
client = MongoClient(uri)

还支持Unix域套接字。套接字路径必须在URI中进行百分比编码:

uri = "mongodb://%s:%s@%s" % (
    quote_plus(user), quote_plus(password), quote_plus(socket_path))
client = MongoClient(uri)

但当作为简单主机名传递时则不是:

client = MongoClient('/tmp/mongodb-27017.sock')

从3.6版开始,PyMongo支持mongodb+srv://URIs。URI必须包含且仅包含一个主机名。主机名将解析为一个或多个DNS SRV records 它将用作连接到MongoDB部署的种子列表。使用SRV uri时 authSource and replicaSet configuration options can be specified using TXT records . 见 Initial DNS Seedlist Discovery spec 更多细节。注意,SRV uri的使用隐式地支持TLS。在要重写的URI中传递tls=false。

注解

当使用mongodb+srv://uri时,MongoClient创建将阻止等待来自DNS的应答。

注解

从3.0版开始 MongoClient 构造函数在连接到一个或多个服务器时不再阻塞,并且不再引发 ConnectionFailure 如果它们不可用,或者 ConfigurationError 如果用户的凭据错误。相反,构造函数立即返回并在后台线程上启动连接进程。您可以检查服务器是否可用,如下所示:

from pymongo.errors import ConnectionFailure
client = MongoClient()
try:
    # The ismaster command is cheap and does not require auth.
    client.admin.command('ismaster')
except ConnectionFailure:
    print("Server not available")

警告

在多处理上下文中使用PyMongo时,请阅读 在多处理中使用PyMongo 第一。

注解

可以使用MongoDB URI或关键字参数传递以下许多选项。如果在URI中传递相同的选项,并且作为关键字参数,则关键字参数优先。

参数
  • host (可选):要连接的单个mongod或mongos实例的主机名或IP地址或Unix域套接字路径,或mongodb URI,或主机名/mongodb URI的列表。如果 host 是IPv6文本,它必须包含在' [“和”] 'RFC2732 URL语法后的字符(例如' [::1] '用于本地主机)。多宿主和循环DNS地址是 not 支持。

  • port (可选):要连接的端口号

  • document_class (可选):用于从此客户端上的查询返回的文档的默认类

  • type_registry (可选):实例 TypeRegistry 启用自定义类型的编码和解码。

  • tz_aware (可选):如果 Truedatetime 在文档中作为值返回的实例 MongoClient 会知道时区(否则他们会很幼稚)

  • connect (可选):如果 True (默认),立即开始在后台连接到MongoDB。否则在第一次操作时连接。

  • directConnection (可选):如果 True ,强制此客户端

    作为独立主机直接连接到指定的MongoDB主机。如果 false ,客户端连接到给定MongoDB主机所属的整个副本集。如果这是 True 如果提供了mongodb+srv://URI或包含多个种子的URI,则会引发异常。

其他可选参数可以作为关键字参数传递:
  • maxPoolSize (可选):每个已连接服务器的最大允许并发连接数。对服务器的请求将阻止 maxPoolSize 到请求服务器的未完成连接。默认为100。不能为0。

  • minPoolSize (可选):池将与每个连接的服务器保持的最小并发连接数。默认值为0。

  • maxIdleTimeMS (可选):在删除和替换连接之前,连接在池中可以保持空闲的最长毫秒数。默认为 None (无限制)。

  • socketTimeoutMS :(整数或无)控制驱动程序在发送普通(非监视)数据库操作后,在断定发生了网络错误之前等待响应的时间(毫秒)。 0None 表示没有超时。默认为 None (没有超时时间)。

  • connectTimeoutMS :(整数或无)控制在服务器监视期间,当将新套接字连接到服务器时,驱动程序将等待多长时间(以毫秒为单位)。 0None 表示没有超时。默认为 20000 (20秒)。

  • server_selector :(可调用或无)可选,用户提供的函数,用于扩充服务器选择规则。函数应接受 ServerDescription 对象并返回一个服务器描述列表,该列表应被认为适合所需的操作。

  • serverSelectionTimeoutMS :(整数)控制驱动程序等待找到可用的、适当的服务器以执行数据库操作的时间(以毫秒为单位);在等待期间,可以执行多个服务器监视操作,每个操作由 connectTimeoutMS .默认为 30000 (30秒)。

  • waitQueueTimeoutMS :(整数或无)如果池中没有可用的套接字,线程将等待池中的套接字多长时间(以毫秒为单位)。默认为 None (没有超时时间)。

  • waitQueueMultiple :(整数或无)乘以maxPoolSize得到一次允许等待套接字的线程数。默认为 None (无限制)。

  • heartbeatFrequencyMS :(可选)定期服务器检查之间的毫秒数,或不接受默认频率10秒的毫秒数。

  • appname :(string或None)创建此MongoClient实例的应用程序的名称。MongoDB 3.4及更高版本将在建立每个连接时在服务器日志中打印此值。它还记录在慢速查询日志和概要文件集合中。

  • driver :(配对或无)PyMongo上实现的驱动程序可以传递 DriverInfo 在建立连接时,将其名称、版本和平台添加到服务器日志中打印的消息中。

  • event_listeners :事件侦听器的列表或元组。看到了吗 monitoring 有关详细信息。

  • retryWrites :(boolean)在MongoDB 3.6+上发生网络错误后,是否将重试在此MongoClient中执行的受支持的写入操作。默认为 True . 支持的写入操作包括:

    不支持的写入操作包括但不限于, aggregate() 使用 $out 管道运算符和任何具有未确认的写入问题(例如{w:0}))的操作。看到了吗https://github.com/mongodb/specifications/blob/master/source/retryable-writes/retryable-writes.rst

  • retryReads :(boolean)在MongoDB 3.6+上发生网络错误后,是否重试在此MongoClient中执行的受支持的读取操作。默认为 True . 支持的读取操作包括: find()find_one()aggregate() 没有 $outdistinct()count()estimated_document_count()count_documents()pymongo.collection.Collection.watch()list_indexes()pymongo.database.Database.watch()list_collections()pymongo.mongo_client.MongoClient.watch()list_databases() .

    不支持的读取操作包括但不限于: map_reduce()inline_map_reduce()command() ,以及对游标的任何getMore操作。

    启用可重试读取使应用程序对诸如网络故障、数据库升级和副本集故障转移等暂时性错误更具弹性。有关哪些错误触发重试的确切定义,请参阅 retryable reads specification .

  • socketKeepAlive :(布尔值) DEPRECATED 是否在已连接的套接字上发送定期保持活动的数据包。默认为 True . 不建议禁用它,请参阅https://docs.mongodb.com/manual/faq/diagnostics/#does-tcp keepalive时间影响mongodb部署“,

  • compressors: Comma separated list of compressors for wire protocol compression. The list is used to negotiate a compressor with the server. Currently supported options are "snappy", "zlib" and "zstd". Support for snappy requires the python-snappy 包裹。zlib支持需要Python标准库zlib模块。zstd需要 zstandard 包裹。默认情况下不使用压缩。服务器上还必须启用压缩支持。MongoDB 3.4+支持snappy压缩。mongodb3.6增加了对zlib的支持。mongodb4.2增加了对zstd的支持。

  • zlibCompressionLevel :(int)将zlib用作有线协议压缩程序时要使用的zlib压缩级别。支持的值为-1到9。-1告诉zlib库使用其默认压缩级别(通常为6)。0表示没有压缩。1是最佳速度。9是最好的压缩。默认为-1。

  • uuidRepresentation :在对的实例进行编码和解码时要使用的BSON表示形式 UUID . 有效值为 pythonLegacy (违约), javaLegacycsharpLegacystandardunspecified . 新应用程序应考虑将此设置为 standard 跨语言兼容性。看到了吗 处理UUID数据 有关详细信息。

写入问题选项:
(仅在通过时设置。没有默认值。)
  • w :(整数或字符串)如果这是副本集,则写入操作将被阻止,直到将它们复制到指定数量或标记的服务器集。 w=<int> 始终包含主副本集(例如,w=3表示写入主副本集并等待复制到 two 辅助设备)。通过w=0 禁用写入确认 以及所有其他写关注点选项。

  • wTimeoutMS :(整数)与 w . 指定一个以毫秒为单位的值,以控制等待写入传播完成的时间。如果复制没有在给定的时间范围内完成,则会引发超时异常。传递wTimeoutMS=0将导致 无限期等待的写入操作 .

  • journal 如果 True 阻止,直到写入操作已提交到日志。不能与一起使用 fsync . 在MongoDB 2.6之前,如果服务器在没有日志记录的情况下运行,则会忽略此选项。从MongoDB 2.6开始的写操作将失败,并出现异常,如果在服务器运行时没有日志记录时使用此选项。

  • fsync 如果 True 服务器在没有日志记录的情况下运行,在服务器将所有数据文件同步到磁盘之前会阻塞。如果服务器正在运行日志记录,这与 j 选项,在写入操作提交到日志之前阻塞。不能与一起使用 j .

Replica set keyword arguments for connecting with a replica set - either directly or via a mongos:
  • replicaSet :(字符串或无)要连接到的副本集的名称。驱动程序将验证它连接的所有服务器是否与此名称匹配。意味着指定的主机是种子列表,驱动程序应尝试查找集合的所有成员。默认为 None .

读取首选项:
  • readPreference :此客户端的副本集读取首选项。什么之中的一个 primaryprimaryPreferredsecondarysecondaryPreferrednearest .默认为 primary .

  • readPreferenceTags :将标记集指定为逗号分隔的冒号分隔键-值对列表。例如 dc:ny,rack:1 .默认为 None .

  • maxStalenessSeconds :(整数)复制过程中,在不再选择副本集进行操作之前,辅助副本集可以落后于主副本集的最大估计时间长度。默认为 -1 ,表示没有最大值。如果设置了maxStalenessSeconds,则它必须是大于或等于90秒的正整数。

认证:
  • username 一个字符串。

  • password 一个字符串。

    虽然用户名和密码在MongoDB URI中必须是百分比转义,但是当作为参数传递时,它们不能是百分比转义。在本例中,空格和斜杠特殊字符都按原样传递:

    MongoClient(username="user name", password="pass/word")
    
  • authSource :要在其上进行身份验证的数据库。默认为URI中指定的数据库(如果提供的话)或“admin”。

  • authMechanismMECHANISMS 供选择。如果没有指定机制,PyMongo在连接到MONGODB 3.0之前的版本时会自动使用MONGODB-CR,在连接到MONGODB 3.0到3.6时自动使用SCRAM-SHA-1,在连接到MONGODB 4.0+时协商要使用的机制(SCRAM-SHA-1或SCRAM-SHA-256)。

  • authMechanismProperties :用于指定特定于身份验证机制的选项。要为GSSAPI身份验证指定服务名称,请通过authMechanismProperties='service'name:<service name>'。为MONGODB-AWS身份验证过程指定会话令牌 authMechanismProperties='AWS_SESSION_TOKEN:<session token>' .

TLS/SSL configuration:
  • tls :(布尔)如果 True ,使用传输层安全性创建到服务器的连接。默认为 False .

  • tlsInsecure :(布尔)指定是否应尽可能放宽TLS约束。设置 tlsInsecure=True 暗示 tlsAllowInvalidCertificates=TruetlsAllowInvalidHostnames=True .默认为 False . 在将此设置为之前,请仔细考虑 True 因为它大大降低了TLS的安全性。

  • tlsAllowInvalidCertificates :(布尔)如果 True ,继续TLS握手,而不管证书验证过程的结果如何。如果这是 False ,并且未为提供值 tlsCAFile ,PyMongo将尝试加载系统提供的CA证书。如果使用的python版本不支持加载系统CA证书,则 tlsCAFile 参数必须指向CA证书的文件。 tlsAllowInvalidCertificates=False 暗示 tls=True .默认为 False . 在将此设置为之前,请仔细考虑 True 因为这可能会使您的应用程序容易受到中间人攻击。

  • tlsAllowInvalidHostnames :(布尔)如果 True ,禁用TLS主机名验证。 tlsAllowInvalidHostnames=False 暗示 tls=True .默认为 False . 在将此设置为之前,请仔细考虑 True 因为这可能会使您的应用程序容易受到中间人攻击。

  • tlsCAFile :包含一个或多个“证书颁发机构”证书的文件,这些证书用于验证从连接的另一端传递的证书。暗示 tls=True .默认为 None .

  • tlsCertificateKeyFile :包含客户端证书和私钥的文件。如果您想使用私有密钥和证书,那么就可以使用私有密钥 ssl_certfilessl_keyfile 而不是选择。暗示 tls=True .默认为 None .

  • tlsCRLFile :包含PEM或DER格式的证书吊销列表的文件。仅Python2.7.9+(Pypy2.5.1+)支持。暗示 tls=True .默认为 None .

  • tlsCertificateKeyFilePassword :在中解密私钥的密码或密码短语 tlsCertificateKeyFilessl_keyfile . 只有在私钥加密时才需要。仅Python2.7.9+(Pypy2.5.1+)和3.3+支持。默认为 None .

  • tlsDisableOCSPEndpointCheck :(布尔)如果 True ,通过服务器证书上指定的OCSP响应程序禁用证书吊销状态检查。默认为 False .

  • ssl :(布尔)别名 tls .

  • ssl_certfile :用于标识针对mongod的本地连接的证书文件。暗示 tls=True .默认为 None .

  • ssl_keyfile :用于标识针对mongod的本地连接的私有密钥文件。如果密钥文件包含在 tlsCertificateKeyFile . 暗示 tls=True .默认为 None .

阅读关注点选项:
(如果未显式设置,将使用服务器默认值)
  • readConcernLevel :(字符串)读取关注级别指定读取操作的隔离级别。例如,使用读取关注级别的读取操作 majority 将只返回已写入大多数节点的数据。如果未指定级别,则将使用服务器默认值。

客户端加密选项:
(如果未显式设置,则不会启用客户端加密。)

参见

MongoDB文档

connections

在 3.11 版更改: 添加了以下关键字参数和URI选项:

  • tlsDisableOCSPEndpointCheck

  • directConnection

在 3.9 版更改: 增加了 retryReads 关键字参数和URI选项。添加了 tlsInsecure 关键字参数和URI选项。以下关键字参数和URI选项已弃用:

  • wTimeout 反对赞成 wTimeoutMS .

  • j 反对赞成 journal .

  • ssl_cert_reqs 反对赞成 tlsAllowInvalidCertificates .

  • ssl_match_hostname 反对赞成 tlsAllowInvalidHostnames .

  • ssl_ca_certs 反对赞成 tlsCAFile .

  • ssl_certfile 反对赞成 tlsCertificateKeyFile .

  • ssl_crlfile 反对赞成 tlsCRLFile .

  • ssl_pem_passphrase 反对赞成 tlsCertificateKeyFilePassword .

在 3.9 版更改: retryWrites 现在默认为 True .

在 3.8 版更改: 增加了 server_selector 关键字参数。添加了 type_registry 关键字参数。

在 3.7 版更改: 增加了 driver 关键字参数。

在 3.6 版更改: 增加了对mongodb+srv://URIs的支持。添加了 retryWrites 关键字参数和URI选项。

在 3.5 版更改: 添加 usernamepassword 选项。记录 authSourceauthMechanismauthMechanismProperties 选项。已弃用 socketKeepAlive 关键字参数和URI选项。 socketKeepAlive 现在默认为 True .

在 3.0 版更改: MongoClient 现在是独立服务器、mongos或副本集的唯一客户机类。它包含了被拆分为 MongoReplicaSetClient :它可以连接到一个副本集,发现它的所有成员,并监视该副本集的降级、选举和重新配置。

这个 MongoClient 构造函数在连接到一个或多个服务器时不再阻塞,并且不再引发 ConnectionFailure 如果它们不可用,或者 ConfigurationError 如果用户的凭据错误。相反,构造函数立即返回并在后台线程上启动连接进程。

因此 alive 方法已被删除,因为它不再提供有意义的信息;即使客户端断开连接,它也可能及时发现服务器以完成下一个操作。

在PyMongo 2.x中, MongoClient 接受了独立MongoDB服务器列表,并使用了它可以连接到的第一个服务器:

MongoClient(['host1.com:27017', 'host2.com:27017'])

不再支持多个standalone列表;如果列出多个服务器,它们必须是同一副本集的成员,或者是同一个分片集群中的mongose。

mongose列表的行为从“高可用性”更改为“负载平衡”。以前,客户端连接到列表中延迟最低的mongos,并使用它,直到出现网络错误提示它重新评估所有mongos的延迟并重新连接到其中一个。在PyMongo3中,客户端对所有Mongo3的网络延迟进行连续监控,并将操作平均分配给延迟最小的Mongo3。看到了吗 mongos负载平衡 更多信息。

这个 connect 选项已添加。

这个 start_requestin_requestend_request 方法以及 auto_start_request 选择权。

这个 copy_database 方法被删除,请参见 copy_database examples 以备选择。

这个 MongoClient.disconnect() 方法已删除;它是 close() .

MongoClient 不再返回 Database 对于带前导下划线的属性名。您必须改用dict样式的查找::

client['__my_database__']

不是:

client.__my_database__
close()

清理客户端资源并断开与MongoDB的连接。

在MongoDB>=3.6上,通过发送一个或多个endSessions命令来结束此客户端创建的所有服务器会话。

关闭连接池中的所有套接字并停止监视器线程。如果再次使用此实例,它将自动重新打开并重新启动线程,除非启用了自动加密。已启用自动加密的客户端在关闭后无法再次使用;任何尝试都将引发 InvalidOperation .

在 3.6 版更改: 结束此客户端创建的所有服务器会话。

c[db_name] || c.db_name

得到 db_name DatabaseMongoClient c .

加薪 InvalidName 如果使用了无效的数据库名称。

event_listeners

为此客户端注册的事件侦听器。

monitoring 有关详细信息。

address

(主机、端口)当前独立的、主的或mongos的,或无。

访问 address 加薪 InvalidOperation 如果客户端在Mongose之间进行负载平衡,因为没有单一地址。使用 nodes 相反。

如果客户端未连接,则在建立连接之前,这将被阻止;如果没有可用的服务器,则会引发ServerSelectionTimeoutError。

3.0 新版功能.

primary

副本集的当前主服务器的(主机、端口)。

返回 None 如果此客户机未连接到副本集,则没有主客户机,或者创建此客户机时没有 replicaSet 选择权。

3.0 新版功能: MongoClient在3.0版中合并MongoReplicaSetClient的功能时获得了此属性。

secondaries

此客户端已知的辅助成员。

(主机、端口)对的序列。空如果此客户机未连接到副本集,则没有可见的辅助设备,或者此客户机创建时没有 replicaSet 选择权。

3.0 新版功能: MongoClient在3.0版中合并MongoReplicaSetClient的功能时获得了此属性。

arbiters

副本集中的仲裁者。

(主机、端口)对的序列。空如果此客户端未连接到副本集,则不存在仲裁器,或者创建此客户端时没有 replicaSet 选择权。

is_primary

如果此客户端连接到可以接受写入的服务器。

如果当前服务器是独立的、mongos或副本集的主服务器,则为True。如果客户端未连接,则在建立连接之前,这将被阻止;如果没有可用的服务器,则会引发ServerSelectionTimeoutError。

is_mongos

如果此客户端连接到mongos。如果客户端未连接,则在建立连接之前,这将被阻止;如果没有可用的服务器,则会引发ServerSelectionTimeoutError。。

max_pool_size

到每个连接的服务器的最大允许并发连接数。对服务器的请求将阻止 maxPoolSize 到请求服务器的未完成连接。默认为100。不能为0。

当服务器的池到达 max_pool_size ,对等待将套接字返回池的服务器块的操作。如果 waitQueueTimeoutMS 设置时,阻止的操作将引发 ConnectionFailure 暂停之后。默认情况下 waitQueueTimeoutMS 未设置。

min_pool_size

池将与每个连接的服务器保持的最小并发连接数。默认值为0。

max_idle_time_ms

在删除和替换连接之前,连接在池中可以保持空闲的最长毫秒数。默认为 None (无限制)。

nodes

所有当前连接的服务器的集合。

警告

当连接到复制副本时,设置 nodes 可以随着时间变化 MongoClient 的副本集视图更改。 nodes 也可以是空集时 MongoClient 首先实例化,但尚未连接到任何服务器,或者网络分区导致它失去与所有服务器的连接。

max_bson_size

连接的服务器接受的最大BSON对象(字节)。

如果客户端未连接,则在建立连接之前,这将被阻止;如果没有可用的服务器,则会引发ServerSelectionTimeoutError。

max_message_size

连接的服务器接收的最大消息(字节)。

如果客户端未连接,则在建立连接之前,这将被阻止;如果没有可用的服务器,则会引发ServerSelectionTimeoutError。

max_write_batch_size

服务器报告的maxWriteBatchSize。

如果客户端未连接,则在建立连接之前,这将被阻止;如果没有可用的服务器,则会引发ServerSelectionTimeoutError。

当连接到MongoDB 2.6之前的服务器版本时,返回默认值。

local_threshold_ms

此实例的本地阈值。

server_selection_timeout

此实例的服务器选择超时(秒)。

codec_options

只读访问 CodecOptions 这个例子。

read_preference

对此实例的“读取”首选项的只读访问。

在 3.0 版更改: 这个 read_preference 属性现在是只读的。

write_concern

只读访问 WriteConcern 这个例子。

在 3.0 版更改: 这个 write_concern 属性现在是只读的。

read_concern

只读访问 ReadConcern 这个例子。

3.2 新版功能.

start_session(causal_consistency=True, default_transaction_options=None)

启动逻辑会话。

此方法的参数与 SessionOptions . 见 client_session 模块以获取详细信息和示例。

需要MongoDB 3.6。打电话是个错误 start_session() 如果此客户端已使用不推荐的方法对多个数据库进行身份验证 authenticate() .

A ClientSession 只能与启动它的MongoClient一起使用。 ClientSession 实例是 not thread-safe or fork-safe . 它们一次只能由一个线程或进程使用。单曲 ClientSession 不能用于同时运行多个操作。

返回

的实例 ClientSession .

3.6 新版功能.

list_databases(session=None, **kwargs)

在已连接服务器的数据库上获取光标。

参数
  • session (可选):a ClientSession .

  • **kwargs (optional): Optional parameters of the listDatabases command 可以作为关键字参数传递给此方法。支持的选项因服务器版本而异。

返回

的实例 CommandCursor .

3.6 新版功能.

list_database_names(session=None)

获取所连接服务器上所有数据库的名称列表。

参数

3.6 新版功能.

database_names(session=None)

DEPRECATED :获取所连接服务器上所有数据库的名称列表。

参数

在 3.7 版更改: 不赞成的使用 list_database_names() 相反。

在 3.6 版更改: 补充 session 参数。

drop_database(name_or_database, session=None)

删除数据库。

Raises TypeError if name_or_database is not an instance of basestring (str in python 3) or Database.

参数
  • name_or_database :要删除的数据库的名称,或 Database 表示要删除的数据库的实例

  • session (可选):a ClientSession .

在 3.6 版更改: 补充 session 参数。

注解

这个 write_concern 当使用MongoDB>=3.4时,此客户端的自动应用于此操作。

在 3.4 版更改: 当连接到MongoDB>=3.4时,将此客户端的写入问题自动应用于此操作。

get_default_database(default=None, codec_options=None, read_preference=None, write_concern=None, read_concern=None)

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

>>> uri = 'mongodb://host/my_database'
>>> client = MongoClient(uri)
>>> db = client.get_default_database()
>>> assert db.name == 'my_database'
>>> db = client.get_database()
>>> assert db.name == 'my_database'

在脚本中非常有用,在这些脚本中,只根据配置文件中的URI选择要使用的数据库。

参数

在 3.8 版更改: 不顾一切。添加了 defaultcodec_optionsread_preferencewrite_concernread_concern 参数。

在 3.5 版更改: 弃用,使用 get_database() 相反。

get_database(name=None, codec_options=None, read_preference=None, write_concern=None, read_concern=None)

得到一个 Database 使用给定的名称和选项。

对于创建 Database 使用不同的编解码器选项、读取首选项和/或写入关注点 MongoClient .

>>> client.read_preference
Primary()
>>> db1 = client.test
>>> db1.read_preference
Primary()
>>> from pymongo import ReadPreference
>>> db2 = client.get_database(
...     'test', read_preference=ReadPreference.SECONDARY)
>>> db2.read_preference
Secondary(tag_sets=None)
参数

在 3.5 版更改: 这个 name 参数现在是可选的,默认为MongoDB连接URI中命名的数据库。

server_info(session=None)

获取有关我们连接的MongoDB服务器的信息。

参数

在 3.6 版更改: 补充 session 参数。

watch(pipeline=None, full_document=None, resume_after=None, max_await_time_ms=None, batch_size=None, collation=None, start_at_operation_time=None, session=None, start_after=None)

监视此群集上的更改。

使用隐式初始值执行聚合 $changeStream 阶段和返回 ClusterChangeStream 遍历此群集上所有数据库上的更改的游标。

在MongoDB 4.0中引入。

with client.watch() as stream:
    for change in stream:
        print(change)

这个 ClusterChangeStream iterable块,直到返回下一个更改文档或引发错误。如果 next() 方法在从服务器检索批处理时遇到网络错误,它将自动尝试重新创建游标,以便不会丢失任何更改事件。在恢复尝试期间遇到的任何错误都表明可能发生了中断,并将引发该错误。

try:
    with client.watch(
            [{'$match': {'operationType': 'insert'}}]) as stream:
        for insert_change in stream:
            print(insert_change)
except pymongo.errors.PyMongoError:
    # The ChangeStream encountered an unrecoverable error or the
    # resume attempt failed to recreate the cursor.
    logging.error('...')

有关恢复过程的精确描述,请参见 change streams specification .

参数
  • pipeline (可选):要附加到初始的聚合管道阶段的列表 $changeStream 舞台。不是所有管道阶段在 $changeStream stage,请参阅MongoDB文档中有关变更流的支持阶段。

  • full_document (可选):作为选项传递给 $changeStream 舞台。允许值:“updateLookup”。当设置为“updateLookup”时,部分更新的更改通知将包括描述文档更改的增量,以及更改发生后某个时间更改的整个文档的副本。

  • resume_after (可选):恢复令牌。如果提供,更改流将开始返回在resume令牌中指定的操作之后直接发生的更改。恢复令牌是更改文档的u id值。

  • max_await_time_ms (可选):服务器在响应getMore操作之前等待更改的最长时间(毫秒)。

  • batch_size (可选):每批要返回的最大文档数。

  • collation (可选):The Collation 用于聚合。

  • start_at_operation_time (可选):如果提供,则生成的更改流将只返回在指定的 Timestamp . 需要MongoDB>=4.0。

  • session (可选):a ClientSession .

  • start_after (可选):与 resume_after 除了那个 start_after 可以在失效事件后恢复通知。此选项和 resume_after 相互排斥。

返回

A ClusterChangeStream 光标。

在 3.9 版更改: 增加了 start_after 参数。

3.7 新版功能.

参见

MongoDB文档

changeStreams

close_cursor(cursor_id, address=None)

已弃用-尽快用给定的id发送kill cursors消息。

加薪 TypeError 如果 cursor_id 不是的实例 (int, long) . 关闭光标实际上意味着什么取决于这个客户机的游标管理器。

此方法可以从 Cursor 在垃圾收集过程中使用析构函数,因此获取锁或进行网络I/O是不安全的。相反,我们计划在后台线程上很快关闭光标。

参数
  • cursor_id :要关闭的光标的id

  • address (可选):(主机,端口)光标服务器的对。如果没有提供,客户机将尝试关闭主服务器、独立服务器或mongos服务器上的光标。

在 3.7 版更改: 已弃用。

在 3.0 版更改: 补充 address 参数。

kill_cursors(cursor_ids, address=None)

已弃用-使用给定的ID尽快发送kill cursors消息。

加薪 TypeError 如果 cursor_ids 不是的实例 list .

参数
  • cursor_ids :要终止的游标ID列表

  • address (可选):(主机,端口)光标服务器的对。如果没有提供,客户机将尝试关闭主服务器、独立服务器或mongos服务器上的光标。

在 3.3 版更改: 已弃用。

在 3.0 版更改: 现在接受一个 address 争论。安排在后台线程上关闭游标,而不是立即发送消息。

set_cursor_manager(manager_class)

已弃用-设置此客户端的游标管理器。

加薪 TypeError 如果 manager_class 不是的子类 CursorManager . 游标管理器处理关闭的游标。不同的管理者可以在何时实际终止已关闭的游标方面实施不同的策略。

参数
  • manager_class :要使用的光标管理器

在 3.3 版更改: 反对,这次是真的。

在 3.0 版更改: 不顾一切。

is_locked

DEPRECATED :此服务器是否已锁定?锁定时,所有写入操作都将被阻止,尽管可能仍然允许读取操作。使用 unlock() 解锁。

已弃用。MongoDB 3.2或更新版本的用户可以运行 currentOp command 直接与 command() ::

is_locked = client.admin.command('currentOp').get('fsyncLock')

MongoDB版本2.6和3.0的用户可以查询“inprog”虚拟集合:

is_locked = client.admin["$cmd.sys.inprog"].find_one().get('fsyncLock')

在 3.11 版更改: 已弃用。

fsync(**kwargs)

DEPRECATED :刷新所有挂起的对数据文件的写入。

可选参数可以作为关键字参数传递:
  • lock :如果为True,请锁定服务器以禁止写入。

  • async :如果为True,则同步时不阻止。

  • session (可选):a ClientSession .

注解

从Python3.7开始 async 是保留关键字。fsync命令的async选项可以使用字典传递::

options = {'async': True}
client.fsync(**options)

已弃用。运行 fsync command 直接与 command() 相反。例如::

client.admin.command('fsync', lock=True)

在 3.11 版更改: 已弃用。

在 3.6 版更改: 补充 session 参数。

警告

asynclock 不能一起使用。

警告

MongoDB不支持 async 选项,并将在该平台上引发异常。

unlock(session=None)

DEPRECATED :解锁先前锁定的服务器。

参数

已弃用。MongoDB 3.2或更新版本的用户可以运行 fsyncUnlock command 直接与 command() ::

client.admin.command('fsyncUnlock')

MongoDB版本2.6和3.0的用户可以查询“解锁”虚拟集合:

client.admin["$cmd.sys.unlock"].find_one()

在 3.11 版更改: 已弃用。

在 3.6 版更改: 补充 session 参数。