Pymongo find if value has a datatype of NumberLong

南笙酒味 提交于 2019-12-12 05:39:27

问题


I'm using the Pymongo driver and my documents look like this:

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

This works because the serial number is a string:

find_one({"serial_number": "1122"})

However, this doesn't:

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

Obviously its because the book_id has a datatype of NumberLong. How can execute the find method based on this datatype?

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

Update:

Still can't get this to work, I can only find string values. Any advise would be much appreciated.


回答1:


You need to ensure your data types are matching. MongoDB is strict about types. When you execute this:

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

you are asking MongoDB for documents with book_id equal to "23302213". As you are not storing the book_id as type string but as type long the query needs to respect that:

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

If, for some reason, you have the ID as string in your app this would also work:

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

Update

Just checked it (MacOS 64bit, MongoDB 2.6, Python 2.7.5, pymongo 2.7) and it works even when providing an integer.

Document in collection (as displayed by Mongo shell):

{ "_id" : ObjectId("536960b9f7e8090e3da4e594"), "n" : NumberLong(222333444) }

Output of 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}



回答2:


You can use $type: http://docs.mongodb.org/manual/reference/operator/query/type/

INT is 16, BIGINT is 18



来源:https://stackoverflow.com/questions/23490798/pymongo-find-if-value-has-a-datatype-of-numberlong

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!