python操作mongodb之六自訂類型儲存

來源:互聯網
上載者:User

標籤:

from pymongo.mongo_client import MongoClientclient=MongoClient(‘192.168.30.252‘,27017)client=drop_database(‘custom_type_example‘)db=client.custom_type_exampleclass Custom(object):def __init__(self,x):self.__x=xdef x(self):return self.__x###上面的類 不能自動編碼 需要手動編碼 如下#將custom編碼成json格式def encode_custom(custom):return {"_type": "custom", "x": custom.x()}#將document還原成custom類def decode_custom(document):assert document["_type"] == "custom"return Custom(document["x"])db.test.insert({"custom": encode_custom(Custom(5))})db.test.find_one()decode_custom(db.test.find_one()["custom"])decode_custom(db.test.find_one()["custom"]).x()foo=Custom(10)foo.x()#手動顯得繁瑣,使用自動的吧from pymongo.son_manipulator import SONManipulatorclass Transform(SONManipulator):def transform_incoming(self, son, collection):for (key, value) in son.items():   if isinstance(value, Custom):    son[key] = encode_custom(value)    elif isinstance(value, dict): # Make sure we recurse into sub-docs    son[key] = self.transform_incoming(value, collection)    return sondef transform_outgoing(self, son, collection):for (key, value) in son.items():if isinstance(value, dict):      if "_type" in value and value["_type"] == "custom":        son[key] = decode_custom(value)      else: # Again, make sure to recurse into sub-docs        son[key] = self.transform_outgoing(value, collection)  return son#加入操縱者入資料庫db.add_son_manipulator(Transform())#插入物件類型db.test.insert({"custom": Custom(5)})db.test.find_one()#使用物件類型db.test.find_one()["custom"].x()5def to_binary(custom):return Binary(str(custom.x()), 128)def from_binary(binary):return Custom(int(binary))#二進位編碼from bson.binary import Binaryfrom pymongo.son_manipulator import SONManipulatorclass TransformToBinary(SONManipulator):def transform_incoming(self, son, collection):  for (key, value) in son.items():    if isinstance(value, Custom):      son[key] = to_binary(value)    elif isinstance(value, dict):      son[key] = self.transform_incoming(value, collection)  return sondef transform_outgoing(self, son, collection):  for (key, value) in son.items():    if isinstance(value, Binary) and value.subtype == 128:      son[key] = from_binary(value)    elif isinstance(value, dict):      son[key] = self.transform_outgoing(value, collection)  return son#加入二進位操作者db.add_son_manipulator(TransformToBinary())

  

python操作mongodb之六自訂類型儲存

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.