所以我通过终端运行$ mongod
来运行本地mongodb。然后我连接到它并使用pymongo
创建一个带有python脚本的小数据库:
import random
import string
import pymongo
conn = pymongo.Connection("localhost", 27017)
collection = conn.db.random_strings
strings = numbers = []
for i in range(0,1000):
char_set = string.ascii_uppercase + string.digits
num_set = [ str(num) for num in [0,1,2,3,4,5,6,7,8,9] ]
strings.append( ''.join( random.sample( char_set * 6, 6 ) ) )
numbers.append( int(''.join( random.sample( num_set * 6, 6 ) ) ) )
collection.insert( { 'str' : strings[ i ], 'num' : numbers[ i ] } )
我现在有一个包含大量随机字符串和数字的数据库。现在出现了让我烦恼的事情,我不明白:
things = collection.find()
first_list = list( things )
second_list = list( things )
print( first_list )
print( second_list )
第一个print语句返回1000个对象的列表,而第二个print语句返回一个空列表([]
)。为什么?
答案 0 :(得分:1)
这一行:
things = collection.find()
实际上会返回Cursor
(docs):
返回与此查询对应的
Cursor
实例。
因此,当您从list
things
创建Cursor
时,会返回find
查询的全部结果并将其复制到first_list
。第二次,Cursor
中存储的things
实例位于结果的末尾,因此,不再需要填充second_list
。