因此,我试图在Pymongo中使用$in操作符,在那里我想使用一堆MongoID进行搜索。
首先,我有一个查询来查找MongoID数组:
findUsers = db.users.find_one({'_id':user_id},{'_id':0, 'f':1})如果我打印findUsers['f'],它看起来如下所示:
[ObjectId('53b2dc0b24c4310292e6def5'), ObjectId('53b6dbb654a7820416a12767')]这些对象IDs是用户ids,我要做的是使用这个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')]}})发布于 2014-07-04 18:36:03
您在MongoDB中遇到了MongoDB()和find()之间的区别。findOne返回一个文档。find()返回一个mongoDB游标。通常,您必须在游标上迭代以显示结果。您的代码在mongo中工作的原因是,如果mongo返回20个文档或少于20个文档,则mongo对游标的处理方式不同--它为您处理游标上的迭代:
游标 在mongo中,读取操作的主要方法是db.collection.find()方法。此方法查询集合并将光标返回给返回的文档。 要访问文档,需要迭代游标。但是,在mongo中,如果返回的游标没有使用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)https://stackoverflow.com/questions/24579066
复制相似问题