为啥 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?

pymongo 是不是支持 json 模式验证?

为啥关系代数中的投影算子会消除重复项?

求ArcGIS高手帮助——为啥我打开一个shp文件会出现这个问题?该怎么解决呢?

u盘插在电脑上打开了插到投影仪上打不开为啥?

MongoDB(PyMongo)分页具有不同的不给出一致的结果