2013-04-04 12 views
6

Python nesnelerini BSON'a dönüştürmek için özel bir kodlayıcının kullanılmasının pymongo'ya söylenmesinin bir yolu var mı?Özel python nesnelerini pymongo ile BSON olarak kodlama

Özellikle numpy dizilerini BSON'a dönüştürmem gerekiyor. Her numpy dizisinin pymongo'ya göndermeden önce yerel bir python dizisine dönüştürülmesini manuel olarak sağlayabildiğimi biliyorum. Fakat bu tekrarlayan ve hataya eğilimli. Bunu yapmak için pymongo bağlantımı kurmanın bir yolunu daha çok isterim.

cevap

3

SONManipulator yazmanız gerekiyor. docs:

SONManipulator örnekleri, PyMongo tarafından otomatik olarak uygulanacak dönüştürmeleri belirtmenize izin verir.

from pymongo.son_manipulator import SONManipulator 

class 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 son 
    def 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 

ardından pymongo veritabanı nesnesine ekleyin: sessizce bir piton dizisine bir numpy dizi döküm istiyorsanız yok

db.add_son_manipulator(Transform()) 

Not _type alan eklemek için.

+0

"son_manipulator" şu anda kullanımdan kaldırılmıştır. V4.0'da kaldırılacaklar. Resmi tavsiye, belgeleri [docs] 'da belirtildiği gibi pymongoya geçirmeden önce dönüştürmektir (https://api.mongodb.com/python/current/api/pymongo/son_manipulator.html). –