PYMONGO - 如何在MongoIDs中使用查询$ in运算符?

时间:2014-07-04 17:57:55

标签: python mongodb pymongo mongodb-query

所以我想在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数组查找users集合中的所有用户。所以我的想法是:

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 个答案:

答案 0 :(得分:2)

您遇到MongoDB中findOne()和find()之间的区别。 findOne返回单个文档。 find()返回一个mongoDB游标。通常,您必须迭代光标以显示结果。您的代码在mongo shell中工作的原因是,如果游标返回20个或更少的文档,mongo shell会以不同的方式处理游标 - 它会为您处理游标迭代:

  

<强>光标

     

在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)