「这是我参与2022首次更文挑战的第3天,活动详情查看: 2022首次更文挑战 」
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不支持😁
看明白了吗?懂了就赶紧👍👍👍💖💖💖