find()查询数据返回游标

pymongo 在使用find()查询集合中的数据时,会返回一个游标而不是真实的数据,访问具体数据需要遍历这个游标值。

解决办法

遍历游标,结果就是查询到的每条数据

date_cursor = db.collection.find({},{'_id':False})
for x in date_cursor:
	print x
# 这样打印出来的就是一条一条的结果
{  "_id"  : ObjectId( "54a970281b5afd45354fd088" ), "name" : '阿花' , '性别''男' }    
{  "_id"  : ObjectId( "54a970351b5afd45354fd089" ), "name" : '啊a阿花', "性别" : '男'}   

但是既然要查询全部,那我肯定希望返回合并后的数据是一个json格式或者数组格式,而不是print一条一条的打印出来,所以

date_cursor = db.collection.find({},{'_id':False})
arr = []
for x in date_cursor:
# 将每条数据添加到数组中
    arr.append(x)
return arr

有了数组,当然还有字典

date_cursor = db.collection.find({},{'_id':False})
result = dict()
arr = []
count = 0
for x in date_cursor:
# 将每条数据添加到数组中
    arr.append(x)
# 通过键值和键名的方式将数据添加到字典中
    result[count] = x
# 键名,可以记录循环次数,顺便当个键名
    count = count + 1
return result

多此一举???

明明每一条的查询结果就是一个字典,为什么不用合并字典的那些方法将他们直接合并成一个字典呢?

因为合并两个字典时,键名重复会覆盖。而返回的数据一般都是这样式的

{  "_id"  : ObjectId( "54a970281b5afd45354fd088" ), "name" : '阿花' , '性别''男' }    
{  "_id"  : ObjectId( "54a970351b5afd45354fd089" ), "name" : '啊a阿花', "性别" : '男'}    

这样的结果看起来似乎每个键值都一样,这时如果采用update或者merge进行合并最后返回结果其实只会有最后的一条数据,而不是合并后的结果

还有一件事,假如你恰好在一个比较老的项目里去增加一个查询功能,而项目里面用的是低版本的flask的话,那么你不能选择返回数组格式,因为低版本的flask不支持😁

看明白了吗?懂了就赶紧👍👍👍💖💖💖

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐