2014-05-06 23 views
0
的數據類型

我使用的Pymongo司機和我的文檔是這樣的:Pymongo發現,如果值具有NumberLong

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

這工作,因爲序列號是一個字符串:

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

但是,這並不是:

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

很明顯,它是因爲book_id具有NumberLong的數據類型。如何執行基於此數據類型的find方法?

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

更新:

仍不能得到這個工作,我只能找到字符串值。任何意見將不勝感激。

+2

你有沒有試過給它傳遞_number_而不是特林? 'find_one({「book_id」:23302213})'? –

+0

是的,我嘗試了,但它沒有找到任何東西! – user1513388

+0

當您在解釋器中檢查字典時,「book_id」的類型是什麼? – msvalkon

回答

0

您需要確保您的數據類型匹配。 MongoDB對類型嚴格。當您執行這一點:

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

你所要求的MongoDB與book_id等於"23302213"文件。當你不存儲book_idstring類型,但是類型long查詢需要尊重:

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),並提供一個整數時,也可使用。

文件的集合(如蒙戈外殼顯示):蟒蛇外殼

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

輸出:

>>> 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} 
+0

嗯..這就是我的想法。它仍然找不到任何東西! – user1513388

+0

我不認爲'NumberLong'類型與'long'相對應,至少如果我用'long()'在mongodb中存儲一個數字,我可以通過給出一個整數來查詢它,也許'pymongo'會在內部根據需要進行轉換。 – msvalkon