Pymango的可解释积垢API

pymongoexplain的Python项目详细描述


Info:Explain collections in PyMongo. See GitHub for the latest source.
Author:Julius Park

关于

这个包提供了一个ExplainableCollection类,它允许PyMongo的集合方法是explained

PyMongoExplain大大简化了解释命令所需的工作量。 例如,假设我们要解释以下update_one

collection.update_one({"quantity": 1057, "category": "apparel"},{"$set": {"reorder": True}})

在PyMongoExplain之前,需要将update_one转换为等效的MongoDB命令:

^{pr2}$

在PyMongoExplain之后:

ExplainableCollection(collection).update_one({"quantity": 1057, "category": "apparel"},{"$set": {"reorder": True}})

安装

只需使用此软件包:

pip install pymongoexplain

支持/反馈

有关问题、讨论或一般技术支持,请访问MongoDB Community Forums。 MongoDB社区论坛是连接其他MongoDB用户、提出问题和获得答案的集中场所。在

错误/功能请求

你觉得你发现了虫子吗?想看看PyMongoExplain的新功能吗? 请打开此GitHub repository的问题。在

如何寻求帮助

打开问题时,请包括以下所有信息:

  • 重现问题的详细步骤,如有可能,包括完整的回溯。在

  • 使用的python版本与修补程序级别完全相同:

    $ python -c "import sys; print(sys.version)"
    
  • 使用的PyMongo的确切版本(如果适用),补丁级别:

    $ python -c "import pymongo; print(pymongo.version); print(pymongo.has_c())"
    
  • PyMongoExplain的确切版本是:

    $ python -c "import pymongoexplain; print(pymongoexplain.version)"
    

依赖关系

PyMongoExplain需要cpython3.5+和PyPy3.5+。在

PyMongoExplain需要PyMongo>=3.10,<4

测试

运行测试的最简单方法是运行python设置.py测试 分布的根源。在

教程

现有应用程序代码中的PyMongo操作可以通过将Collection对象与^{tt1}交换来解释$ 物体。ExplainableCollection类提供PyMongo的Collection提供的所有crudapi方法, 但是,使用这个类来运行操作运行解释,而不是执行它们。在

要对命令运行explain,首先从最初用于运行命令的Collection对象实例化ExplainableCollection

from pymongoexplain import ExplainableCollection

collection = client.db.products
explain = ExplainableCollection(collection)

现在您可以解释一些命令了。请记住,解释命令并不会执行它:

result = explain.update_one({"quantity": 1057, "category": "apparel"}, {"$set": {"reorder": True}})

现在,result将包含对给定的update_one命令运行explain的输出:

{'ok': 1.0,
 'operationTime': Timestamp(1595603051, 3),
 'queryPlanner': {'indexFilterSet': False,
                  'namespace': 'db.products',
                  'parsedQuery': {'$and': [{'category': {'$eq': 'apparel'}},
                                           {'quantity': {'$eq': 1057}}]},
                  'planCacheKey': 'CD8F6D8F',
                  'plannerVersion': 1,
                  'queryHash': 'CD8F6D8F',
                  'rejectedPlans': [],
                  'winningPlan': {'inputStage': {'direction': 'forward',
                                                 'filter': {'$and': [{'category': {'$eq': 'apparel'}},
                                                                     {'quantity': {'$eq': 1057}}]},
                                                 'stage': 'COLLSCAN'},
                                  'stage': 'UPDATE'}},
 'serverInfo': {'gitVersion': '27f5c1ee9f513f29fe30b8ebefed99581428c6e1',
                'host': 'Juliuss-MBP.verizon.net',
                'port': 27017,
                'version': '4.4.0-rc13'}}

由于ExplainableCollection实例提供了Collection实例提供的所有相同方法,因此解释应用程序代码中的操作只需简单地用ExplainableCollection实例替换应用程序代码中的Collection实例。在

解释脚本中的命令

您还可以使用我们的CLI工具对Python脚本中的所有命令运行explain。 给定一个包含pymongo命令的脚本,您可以简单地运行:

python3 -m pymongoexplain <path/to/your/script.py>

这将记录每个命令的解释输出 在指定的脚本中,,除了运行脚本本身中的每个命令。请注意,因为 explain输出是使用logging模块生成的, 如果您的脚本配置日志模块,请记住以下几点:

  • 如果脚本将logging level设置为高于INFO,则解释输出将被完全抑制。在
  • explain输出将被发送到脚本配置的日志模块要发送到的任何流。在

脚本所需的任何位置参数或参数都可以是 只需将其附加到调用中,如下所示:

python3 -m pymongoexplain <path/to/your/script.py> [PARAMS] [--optname OPTS]
{id10}$

限制

此包不支持fluentCursor API, 所以如果你想这样使用它:

ExplainableCollection(collection).find({}).sort(...)

而是将所有参数传递给find()调用,如下所示:

ExplainableCollection(collection).find({}, sort=...)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OnClick用于ListView中的特定项   java如何多次循环相同的TestNG测试。包括课前和课后   java如何在Codenameone中设置BrowserComponent浏览器窗口大小   java Socketchannel始终为空   java以编程方式向JavaFX WebEngine历史添加新条目   java Hibernate+Spring与Oracle一起使用分层查询(从+连接方式开始)   Java中的安卓 getView和Beacon(Estimote)问题   计时器如何在java中设置暂停选项   java为什么输入1000000000000的输出不正确?   java如何在程序执行期间更改log4j2中的日志记录级别   java阻止代码引发XML异常   未找到媒体类型为application/json的java JAX RS MessageBodyWriter   java如何将BuffereImage中的特定颜色(0xFF00FF)设置为透明?   java如何列出web元素,如果网页中没有特定链接的id,如何单击网页中的特定链接?   在Java中读取txt文件时获取EOFEException   java如何避免为每个视图添加inject方法?   JavaSpringController:Facebook上类似文章的永久链接   java在尝试执行脚本时遇到错误“net.serentiybdd.core.exceptions.serentitymanagedexception:No session ID”