[英]Pymongo find if value has a datatype of NumberLong
我正在使用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方法?
==================================================
更新:
仍然無法使它正常工作,我只能找到字符串值。 任何建議將不勝感激。
您需要確保數據類型匹配。 MongoDB對類型嚴格。 執行此命令時:
find_one({"book_id": "23302213"})
您正在向MongoDB "23302213"
book_id
等於"23302213"
文檔。 由於您不是將book_id
存儲為string
類型,而是將類型存儲為long
類型long
因此查詢需要遵守以下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}
您可以使用$ type: http : //docs.mongodb.org/manual/reference/operator/query/type/
INT是16,BIGINT是18
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.