Repasemos los errores:
-
El primer error aparece simplemente porque necesita un objeto BSON real. Tenga en cuenta que nunca ha codificado ningún dato, creando
bson.binary.Binaryobjeto no significa invocarBSON.encode(). -
Y ahí es donde PyMongo te engaña un poco. El
bson.binary.Binaryes unstrparcheado en tiempo de ejecución obytesinstancia (ver fuente ). Por eso obtienes el segundo error:lo que llamas es en realidadstr.decode(), noBSON.decode(). Entonces,gotfieldcontiene los datos flotantes aleatorios que almacenó inicialmente, pero el objeto en sí tiene algunos métodos diferentes (por ejemplo,repr()) vinculado a él.