python-MongoDB优化FindAndModify或查找排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-MongoDB优化FindAndModify或查找排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1537字,纯文字阅读大概需要3分钟。
内容图文
![python-MongoDB优化FindAndModify或查找排序](/upload/InfoBanner/zyjiaocheng/881/a993426bdb424326ad236477a688a673.jpg)
运行MongoDB,我正在尝试将优先级为(d)的三列键查找(a,b,c)排队.我有一个查询(pymongo语法):
collection.find({'a':'foo','b':'bar','c':'baz'}, sort = [('d', -1)] )
在运行复合索引(a 1,b 1,c 1,d-1)的情况下,explain显示全表扫描和BasicCursor.
在d上有一个索引时,说明显示仅使用d索引.
对于大表,我真正想要的是使用复合索引.我该如何进行这项工作?
INDEX_INFORMATION:
{u’id’:{u’key’:[(u’_id’,1)],u’v’:1},
u’color_1_level_1_in_progress_1_Ranking_-1’:{u’key’:[(u’color’,
1),
(u’level’,1),
(u’in_progress’,1),
(u’Ranking’,-1)],
u’v’:1}}
EXPLAIN ON A FIND+SORT QUERY
db.coll.find({'level' : {'$in' : [0,1,2]}, 'in_progress' : 0, 'color' : {'$in' : ['Red', 'Blue', 'Green]} }, sort = [('Ranking', -1)] ).explain()
OUTPUT ON EXPLAIN
OperationFailure: database error: too much data for sort() with no index. add an index or specify a smaller limit
THE QUEUEING QUERY I CARE ABOUT OPTIMIZING
coll.find_and_modify(
query = {'level' : {'$in' : [0,1,2]}, 'in_progress' : 0, 'color' : {'$in' : ['Red', 'Blue', 'Green']} },
sort = {'Ranking' : -1},
update = {'$set': {'in_progress': 1}}
)
请注意,当我在“排名”字段上添加索引时,说明会返回正在使用排名索引.但是,复合索引从未使用过,并且在1.5 MM文档测试语料库上的性能非常低.
解决方法:
有一种在执行查询时强制使用特定索引的方法,称为提示.
只需在游标上调用它即可:
cursor = collection.find({query-doc}).hint({index-fields})
内容总结
以上是互联网集市为您收集整理的python-MongoDB优化FindAndModify或查找排序全部内容,希望文章能够帮你解决python-MongoDB优化FindAndModify或查找排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。