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 Maven无法识别安装在Ubuntu外壳上的$java_HOME jdk   java如何防止可运行程序在其中一个抛出异常时执行   java Listview在按下项时不触发   如何在WindowsPhone8中使用JavaRESTWebService?   java在spring引导下使用多个dispatcher servlet/web上下文   java为什么在删除容器的绝对大小时不绘制GEF子项?   java在hibernate实体中保留DB约束是好的   JavaSpring选择最高优先级bean   ArrayList<Class>java字符串[]   有向加权边图的Java邻接表实现   字母数字字符串的java Tesseract配置:混合2、Z、6和G   如果输入为空,则带有EditText的java警报对话框将关闭   jsp上的java Struts 2动作响应   java获取IndexOutOfBundException Android   scala AWSJAVASDK:解压缩大小必须小于262144000字节