pymongo 查询中的 long 或 int 是否必须匹配 mongodb 中的数字类型?

Does long or int in pymongo queries have to match the number type in mongodb?

我在 pymongo 文档或 mongodb 文档中都找不到太多说明。我目前正在使用 python3,我有一个程序插入数据,另一个程序查询它。

基本上,如果一个程序将数据作为 BSON long 类型(64 位)插入,另一个程序是否可以使用 32 位 int 查询该数据?

比如我写数据的地方

from bson.int64 import Int64
...
coll.insert({'myval': Int64(100)})

以及我读取数据的位置。

coll.find({'myval': int(100)})

无论 int 有多大,这都有效吗?即使忽略 python3 是否将 int 存储为 64 位?

您不必在写入时手动将您的数字转换为 bson.int64; pymongo 会自动处理这个问题。

是的,您可以使用以下方式读取数据:

coll.find({'myval': int(100)})

或更简单:

coll.find({'myval': 100})

MongoDB中int64和int32的区别更多的是关于BSON存储大小。您可以使用任一类型查询:

Python 3.3.5 (default, Jan 29 2015, 02:00:04) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymongo
>>> c = pymongo.MongoClient()
>>> from bson.int64 import Int64
>>> c.test.int64.insert_one({'int64': Int64(2 ** 32)})
<pymongo.results.InsertOneResult object at 0x7f6ece3f43c0>
>>> c.test.int64.find_one({'int64': int(2 ** 32)})
{'int64': 4294967296, '_id': ObjectId('554fa762fa5bd8782e1698ce')}