簡體   English   中英

Pymongo查找value是否具有NumberLong數據類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM