pymongo创建hash和text索引
报错中…….
在使用pymongo创建基础索引, 出现以下错误
1 | pymongo.errors.OperationFailure: WiredTigerIndex::insert: key too large to index, failing |
代码如下:
1 | import pymongo |
google原因…….
这个是因为在MongoDB中,从2.6开始,索引项的总大小(根据BSON类型可能包括结构开销)必须小于1024字节。
就是要建立的索引字段的值特别大, 超过了1024字节, 对于比较大的值建立索引, 建立的索引也会非常大, 效率也会很慢, 占用更大的RAM空间, 所以不建议对较大的创建普通索引
关于mongo官方文档关于index key的限制
https://docs.mongodb.com/manual/reference/limits/#Index-Key-Limit
解决中……
1
最简单方法
最简单也是最难的方法:
想办法减少字段值的大小, 不超过1024字节
2
改变mongo配置
选择其一即可
- 使用以下命令启动mongod
1 | mongod --setParameter failIndexKeyTooLong=false |
- 在mongo中执行
1 | db.getSiblingDB('admin').runCommand( { setParameter: 1, failIndexKeyTooLong: false } ) |
3
创建hash索引
建立hash索引
创建hash索引官方文档
https://docs.mongodb.com/manual/core/index-hashed/
1 | Collection.create_index([("description", pymongo.HASHED)]) |
例:将创建索引改为
1 | user_col.create_index([("description", pymongo.HASHED)]) |
进入mongo, 查看索引如下
1 | > use test |
4
创建text索引
注意 : text索引一个集合只能创建一个, 再次创建会报错
创建text索引官方文档
https://docs.mongodb.com/manual/core/index-text/
1 | Collection.create_index([("description", pymongo.TEXT)]) |
只需要将pymongo.HASHED 改为 pymongo.TEXT 就可以了
1 | user_col.create_index([("description", pymongo.TEXT)]) |
再次查看db.user.getIndexes(), 会多出一个text索引:
1 | { |
到这里这个错误就被愉快的解决了, 有问题欢迎留言哦!
精彩推荐
作者:
胖胖不胖
版权声明:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不止于python
感谢您的支持,我会继续努力!
微信支付
支付宝