我花了我一天的生活試圖解決同樣的問題...
問題的根源可能是您的Java代碼存儲與使用Java驅動程序中蒙戈數據庫的UUID傳統的UUID3標準。要驗證,您只需使用Mongo shell登錄並查看UUID的原始輸出。如果有3個,那就是這個問題。
db.my_collection_name.find().limit(1)
...BinData(3,"blahblahblahblahblah"),...
隨着UUID3,Mongo決定根據給定的語言做所有與驅動程序不同的任何事情。 (感謝Mongo ...)直到UUID4,Mongo才決定在各種語言的所有不同驅動程序之間進行標準化。理想情況下,您應該切換到UUID4,但這是一個更具影響力的解決方案,因此不一定實用。參考:http://3t.io/blog/best-practices-uuid-mongodb/
不用擔心,有希望!使這一切工作的神奇技術包括簡單地使用CodecOptions中的JAVA_LEGACY uuid規範拉取集合。
my_collection = db.get_collection('MyCollectionName', CodecOptions(uuid_representation=JAVA_LEGACY))
之後,你可以從你的API和您的查詢結果的UUID查詢也將有的UUID的格式相同的API。
這是一個使用這種技術的完整查詢示例。
import pprint
import uuid
from bson.binary import JAVA_LEGACY
from bson.codec_options import CodecOptions
from pymongo import MongoClient
PP = pprint.PrettyPrinter(indent=2)
client = MongoClient('localhost', 27017)
db = client.my_database
# REFERENCES: http://3t.io/blog/best-practices-uuid-mongodb/ | http://api.mongodb.org/python/current/api/bson/binary.html
my_collection = db.get_collection('my_collection', CodecOptions(uuid_representation=JAVA_LEGACY))
my_java_uuid3 = "bee4ecb8-11e8-4267-8885-1bf7657fe6b7"
results = list(my_collection.find({"my_uuid": uuid.UUID(my_java_uuid3)}))
if results and len(results) > 0:
for result in results:
PP.pprint(result)
如果您發佈了兩種類型的示例(理想情況下是相同的值!),將會有所幫助。 – djc 2014-11-03 12:43:50