我使用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方法?
=============================================== ===
更新
仍然无法使其工作,我只能找到字符串值。任何建议都会非常感激。
答案 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