Syntax error How to encode custom python objects as BSON with Pymongo?

How to encode custom python objects as BSON with Pymongo?



To encode custom python objects as BSON with Pymongo, you have to write a SONManipulator. From the docs:

SONManipulator instances allow you to specify transformations to be applied automatically by 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

then add it to your pymongo database object −

db.add_son_manipulator(Transform())

Make a note that you don't have to add the _type field if you want to silently cast a numpy array to a python array.

Updated on: 2020-06-16T11:29:35+05:30

451 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements