Pymongo查找值是否具有NumberLong数据类型

2024-09-29 05:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这是因为序列号是一个字符串:

^{pr2}$

但是,这并不能:

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

显然,这是因为book_id的数据类型是NumberLong。如何基于此数据类型执行find方法?在

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

更新:

仍然无法使其工作,我只能找到字符串值。如有任何建议,将不胜感激。在


Tags: 字符串文档idnumber驱动程序serialfindone
2条回答

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

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

您正在向MongoDB请求book_id等于"23302213"的文档。由于您没有将book_id存储为string类型,而是存储为long类型,因此查询需要考虑:

^{pr2}$

如果出于某种原因,你的应用程序中的ID为string,这也可以:

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

更新

只需检查它(MacOS64bit、MongoDB 2.6、Python2.7.5、PyMongo2.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}

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

整数是16,大整数是18

相关问题 更多 >