PYMONGO - 如何在MongoIDs中使用查询 $in 操作符?
我正在尝试在Pymongo中使用$in操作符,目的是用一堆MongoID来进行搜索。
首先,我有一个查询,用来找到一组MongoID:
findUsers = db.users.find_one({'_id':user_id},{'_id':0, 'f':1})
如果我打印findUsers['f']
,它看起来是这样的:
[ObjectId('53b2dc0b24c4310292e6def5'), ObjectId('53b6dbb654a7820416a12767')]
这些对象ID是用户ID,我想做的是找到用户集合中所有在这个ObjectID数组里的用户。所以我想到了这个方法:
foundUsers = db.users.find({'_id':{'$in':findUsers['f']}})
但是当我打印foundUsers时,结果是这样的:
<pymongo.cursor.Cursor object at 0x10d972c50>
这和我通常打印查询结果时得到的结果不一样 :(
我这里做错了什么呢?
非常感谢。
另外,供你参考,我在mongo shell中查询过,结果是正常的:
db.users.find({_id: {$in:[ObjectId('53b2dc0b24c4310292e6def5'), ObjectId('53b6dbb654a7820416a12767')]}})
1 个回答
你遇到了MongoDB中findOne()和find()的区别。findOne会返回一个单独的文档,而find()则返回一个MongoDB的游标。通常情况下,你需要遍历这个游标才能显示结果。你的代码在mongo shell中能正常工作,是因为mongo shell对游标的处理方式不同,如果返回的文档数量在20个或以下,它会自动帮你遍历游标:
游标
在mongo shell中,读取操作的主要方法是 db.collection.find()。这个方法会查询一个集合,并返回一个指向返回文档的游标。
要访问这些文档,你需要遍历这个游标。不过,在mongo shell中,如果返回的游标没有用var关键字赋值给一个变量,那么这个游标会自动遍历最多20次[1],以打印出结果中的前20个文档。
http://docs.mongodb.org/manual/core/cursors/
关于遍历游标的pymongo手册页面可能是个不错的起点:
http://api.mongodb.org/python/current/api/pymongo/cursor.html
这里有一段代码,可以帮助你理解基本概念。在你调用find()之后,运行这段代码:
for doc in findUsers:
print(doc)