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

jon*_*tyo 5 python mongodb pymongo mongodb-query

所以我想在Pymongo中使用$ in运算符,我想用一堆MongoID进行搜索.

首先,我有这个查询来查找MongoID数组:

findUsers = db.users.find_one({'_id':user_id},{'_id':0, 'f':1})
Run Code Online (Sandbox Code Playgroud)

如果我打印findUsers['f']它看起来像这样:

[ObjectId('53b2dc0b24c4310292e6def5'), ObjectId('53b6dbb654a7820416a12767')]
Run Code Online (Sandbox Code Playgroud)

这些对象ID是用户ID,我想要做的是使用此ObjectID数组查找users集合中的所有用户.所以我的想法是这样的:

foundUsers = db.users.find({'_id':{'$in':findUsers['f']}})
Run Code Online (Sandbox Code Playgroud)

但是,当我打印foundUsers时,结果如下:

<pymongo.cursor.Cursor object at 0x10d972c50>
Run Code Online (Sandbox Code Playgroud)

这不是我打印查询时通常得到的:(

我在这做错了什么?

非常感谢.

也仅供您参考,我在mongo shell中查询并且它按预期工作:

db.users.find({_id: {$in:[ObjectId('53b2dc0b24c4310292e6def5'), ObjectId('53b6dbb654a7820416a12767')]}})
Run Code Online (Sandbox Code Playgroud)

Joh*_*one 3

您遇到了 MongoDB 中 findOne() 和 find() 之间的差异。findOne 返回单个文档。find() 返回一个 mongoDB 游标。通常,您必须迭代光标才能显示结果。您的代码在 mongo shell 中工作的原因是,如果 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)
Run Code Online (Sandbox Code Playgroud)