Pymongo发现value的数据类型是否为NumberLong

时间:2014-05-06 09:27:10

标签: python mongodb pymongo

我使用Pymongo驱动程序,我的文档如下所示:

{
"_id" : ObjectId("5368a4d583bcaff3629bf412"),
"book_id" : NumberLong(23302213),
"serial_number" : '1122',
}

这是有效的,因为序列号是一个字符串:

find_one({"serial_number": "1122"})

然而,这并不是:

find_one({"book_id": "23302213"})

显然是因为book_id的数据类型为NumberLong。如何根据此数据类型执行find方法?

=============================================== ===

更新

仍然无法使其工作,我只能找到字符串值。任何建议都会非常感激。

2 个答案:

答案 0 :(得分:1)

您需要确保您的数据类型匹配。 MongoDB对类型很严格。执行此操作时:

find_one({"book_id": "23302213"})

您要求MongoDB查找book_id等于"23302213"的文档。由于您没有将book_id存储为类型string,而是存储为类型long,因此查询需要尊重:{/ p>

find_one({"book_id": long(23302213)})

如果出于某种原因,您在应用中将ID作为字符串,那么这也可以起作用:

find_one({"book_id": long("23302213")})

<强>更新

刚检查过它(MacOS 64bit,MongoDB 2.6,Python 2.7.5,pymongo 2.7),即使提供整数也能正常工作。

集合中的文档(由Mongo shell显示):

{ "_id" : ObjectId("536960b9f7e8090e3da4e594"), "n" : NumberLong(222333444) }

python shell的输出:

>>> collection.find_one({"n": 222333444})
{u'_id': ObjectId('536960b9f7e8090e3da4e594'), u'n': 222333444L}
>>> collection.find_one({"n": long(222333444)})
{u'_id': ObjectId('536960b9f7e8090e3da4e594'), u'n': 222333444L}

答案 1 :(得分:0)

您可以使用$ type: http://docs.mongodb.org/manual/reference/operator/query/type/

INT为16,BIGINT为18