2013-04-04 10 views
6

Czy istnieje sposób na powiedzenie pymongo, aby użył niestandardowego kodera do konwersji obiektów Pythona na BSON?Kodowanie niestandardowych obiektów python jako BSON z pymongo

W szczególności potrzebuję konwertować numpy tablic na BSON. Wiem, że mogę ręcznie upewnić się, że każda tablica numpy zostanie przekonwertowana na macierzystą tablicę python przed wysłaniem jej do pymongo. Jest to jednak powtarzalne i podatne na błędy. Wolałbym mieć sposób, aby skonfigurować moje połączenie pymongo, aby zrobić to automatycznie.

Odpowiedz

3

Musisz napisać SONManipulator. Z instancji SONManipulator instancji SONManipulator można określić transformacje, które będą automatycznie stosowane przez PyMongo.

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 

następnie dodać go do obiektu bazy danych pymongo:

db.add_son_manipulator(Transform()) 

Uwaga nie trzeba dodać pole _type jeśli chcesz dyskretnie rzucić numpy tablicy do tablicy Pythona.

+0

'son_manipulator' jest obecnie przestarzałe. Zostaną usunięte w wersji 4.0. Oficjalna rekomendacja polega na przekształceniu dokumentów przed przekazaniem ich na pymongo, zgodnie z [docs] (https://api.mongodb.com/python/current/api/pymongo/son_manipulator.html) –

Powiązane problemy