为啥 PyMongo 在列出集合时给出不支持的投影选项:$substr?
Posted
技术标签:
【中文标题】为啥 PyMongo 在列出集合时给出不支持的投影选项:$substr?【英文标题】:Why does PyMongo give Unsupported projection option: $substr when listing collections?为什么 PyMongo 在列出集合时给出不支持的投影选项:$substr? 【发布时间】:2019-08-25 03:08:09 【问题描述】:我有以下代码:
client = MongoClient(uri)
db = client['my_db']
print(db.collection_names())
#print(db.list_collection_names())
我得到了错误
文件“C:\Users\gwerner004\eclipse-workspace\MongoTestRasa\FirstTest.py”,第 17 行,连接中 打印(db.collection_names()) 文件“C:\Users\gwerner004\AppData\Local\Programs\Python\Python36\lib\site-packages\pymongo\database.py”,第 715 行,在 collection_names nameOnly=True, **kws)] 文件“C:\Users\gwerner004\AppData\Local\Programs\Python\Python36\lib\site-packages\pymongo\database.py”,第 677 行,在 list_collections **kwargs) _list_collections 中的文件“C:\Users\gwerner004\AppData\Local\Programs\Python\Python36\lib\site-packages\pymongo\database.py”,第 651 行 cursor = self._command(sock_info, cmd, slave_okay)["cursor"] _command 中的文件“C:\Users\gwerner004\AppData\Local\Programs\Python\Python36\lib\site-packages\pymongo\database.py”,第 514 行 客户=自我.__客户) 文件“C:\Users\gwerner004\AppData\Local\Programs\Python\Python36\lib\site-packages\pymongo\pool.py”,第 579 行,在命令中 未确认=未确认) 文件“C:\Users\gwerner004\AppData\Local\Programs\Python\Python36\lib\site-packages\pymongo\network.py”,第 150 行,在命令中 parse_write_concern_error=parse_write_concern_error) _check_command_response 中的文件“C:\Users\gwerner004\AppData\Local\Programs\Python\Python36\lib\site-packages\pymongo\helpers.py”,第 155 行 raise OperationFailure(msg % errmsg, code, response) pymongo.errors.OperationFailure:不支持的投影选项:$substr
为什么这样的基本操作会失败?我在 Windows 10 上运行并使用 Python 3.6.7。我的 PyMongo 是 3.7.2
【问题讨论】:
list_collections
也有同样的问题,但我使用的是 CosmoDB 实例
我发现client['my-collection'].list_collection_names('%d')
会给出另一个错误提示:AttributeError: 'str' object has no attribute '_txn_read_preference'
【参考方案1】:
$substr 运算符适用于所有当前支持的 MongoDB 版本 (2.6-4.4):
> db.foo.aggregate([$project:"name": "$substr": ["$name", 2, -1]])
"_id" : ObjectId("5fc032e56bc5b2e2216cdd08"), "name" : "llo"
您很可能正在使用古老的 MongoDB 安装,或者根据其中一个 cmets,模仿数据库(如 CosmosDB),其行为与 MongoDB 本身不同(官方 MongoDB 驱动程序也不支持)。
【讨论】:
以上是关于为啥 PyMongo 在列出集合时给出不支持的投影选项:$substr?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PyMongo 3 给出 ServerSelectionTimeoutError?