gpt4 book ai didi

mongodb - 使用游标作为查询的迭代器

转载 作者:可可西里 更新时间:2023-11-01 09:06:52 25 4
gpt4 key购买 nike

我正在阅读有关 mongodb 的内容。遇到这部分http://www.mongodb.org/display/DOCS/Tutorial它说 -

> var cursor = db.things.find();
> printjson(cursor[4]);
{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }

“当以这种方式使用游标时,请注意最高访问的所有值(上面的游标[4])都会同时加载到 RAM 中。这对于大型结果集是不合适的,因为您将用完内存。游标应该用作任何返回大量元素的查询的迭代器。”

如何将游标用作查询的迭代器?感谢您的帮助

最佳答案

你已经标记了你正在使用 pymongo,所以我会给你两个使用游标作为迭代器的 pymongo 示例:

import pymongo
cursor = pymongo.Connection().test_db.test_collection.find()
for item in cursor:
print item
#this will print the item as a dictionary

import pymongo
cursor = pymongo.Connection().test_db.test_collection.find()
results = [item['some_attribute'] for item in cursor]
#this will create a list comprehension containing the value of some_attribute
#for each item in the collection

此外,您可以设置返回给 pymongo 驱动程序的批处理大小:

import pymongo
cursor = pymongo.Connection().test_db.test_collection.find()
cursor.batchsize(20) #sets the size of batches of items the cursor will return to 20

通常不需要打乱批处理大小,但是如果您运行驱动程序的机器在您处理查询结果时出现内存问题和页面错误,您可能必须设置它以获得更好的性能(这对我来说真的是一个痛苦的优化,我一直保留默认值)。

就 javascript 驱动程序(启动“shell”时加载的驱动程序)而言,该部分文档警告您不要使用“数组模式”。来自在线手册:

Array Mode in the Shell

Note that in some languages, like JavaScript, the driver supports an "array mode". Please check your driver documentation for specifics.

In the db shell, to use the cursor in array mode, use array index [] operations and the length property.

Array mode will load all data into RAM up to the highest index requested. Thus it should not be used for any query which can return very large amounts of data: you will run out of memory on the client.

You may also call toArray() on a cursor. toArray() will load all objects queries into RAM.

关于mongodb - 使用游标作为查询的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com