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)"
在
测试
运行测试的最简单方法是运行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]
限制
此包不支持fluentCursor API, 所以如果你想这样使用它:
ExplainableCollection(collection).find({}).sort(...)
而是将所有参数传递给find()调用,如下所示:
ExplainableCollection(collection).find({}, sort=...)
- 项目
标签: