使用Pymongo查找值是否为NumberLong类型

0 投票
2 回答
4538 浏览
提问于 2025-04-18 05:31

我正在使用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}

撰写回答