Python Mongodb排序太大,如何使用索引?

2024-09-26 17:43:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python迭代大型Mongodb数据库的所有元素

通常,我会:

mgclient = MongoClient('mongodb://user:pwd@0.0.0.0:27017')
mgdb = mgclient['mongo']
mgcol = mgdb['name']
for mg_ob in mgcol.find().sort('Date').sort('time'):
    #DOTHINGS

但是它说“排序操作使用的内存超过了最大的33554432字节。添加索引,或指定较小的限制”

所以我创建了一个名为“SortedTime”的索引,但我不知道现在如何使用它

基本上,我想做的是:

mgclient = MongoClient('mongodb://user:pwd@0.0.0.0:27017')
mgdb = mgclient['mongo']
mgcol = mgdb['name']
for mg_ob in mgcol.find()['SortedTime']:
    #DOTHINGS

有什么想法吗?多谢你帮忙

我希望这篇文章能帮助别人。非常感谢

更新: 多亏了乔,我才成功。创建索引后:

resp = mgcol.create_index(
[
("date", 1),
("time", 1)
]
)

print ("index response:", resp)

我所做的只是:

mgclient = MongoClient('mongodb://user:pwd@0.0.0.0:27017')
mgdb = mgclient['mongo']
mgcol = mgdb['name']
for mg_ob in mgcol.find():
    #DOTHINGS

不需要使用索引名


Tags: nameinformongomongodbpwdfindmongoclient
1条回答
网友
1楼 · 发布于 2024-09-26 17:43:53

您的查询按2个字段进行排序,Datetime,因此您需要一个索引,该索引首先包含键规范中的这些字段

使用mongo shell时,可以使用createIndexshell助手:

db.getSiblingDB("mongo").getCollection("name").createIndex({Date:1, time:1})

在客户端工作时,可以使用createIndexes数据库命令

一旦创建了索引,就可以像以前一样进行查询,mongod的查询执行器应该使用该索引

您可以使用explain()获得详细的查询执行阶段,以查看考虑了哪些索引以及每个索引的比较性能

相关问题 更多 >

    热门问题