使用Pymongo查找值是否为NumberLong类型
我正在使用Pymongo这个工具,我的文档看起来是这样的:
{
"_id" : ObjectId("5368a4d583bcaff3629bf412"),
"book_id" : NumberLong(23302213),
"serial_number" : '1122',
}
这样是可以的,因为序列号是字符串类型:
find_one({"serial_number": "1122"})
但是,这样就不行:
find_one({"book_id": "23302213"})
显然是因为book_id的类型是NumberLong。那么我该如何根据这个数据类型来执行查找呢?
==================================================
更新:
我还是无法让它工作,我只能找到字符串类型的值。任何建议都非常感谢。
2 个回答
0
你可以使用 $type 这个功能:
http://docs.mongodb.org/manual/reference/operator/query/type/
在这里,INT 代表的是 16,BIGINT 代表的是 18。
1
你需要确保你的数据类型是匹配的。MongoDB 对数据类型要求很严格。当你执行这个操作时:
find_one({"book_id": "23302213"})
你是在请求 MongoDB 找到 book_id
等于 "23302213"
的文档。因为你并不是把 book_id
存储为字符串类型,而是存储为长整型,所以查询时需要遵循这个规则:
find_one({"book_id": long(23302213)})
如果出于某种原因,你在应用中把 ID 存储为字符串,这样也能正常工作:
find_one({"book_id": long("23302213")})
更新
我刚检查了一下(MacOS 64位,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}