2017-02-22 26 views
0

Я работал с pymongo 3.3.0 и mongo 3.2.10 на машине Ubuntu 14.04. Недавно я заметил, что некоторые из моих записей вставляются с типом BinData вместо строки, что и я ожидаю.Какие типы объектов вставляются pymongo в mongodb как BinData?

теперь у меня есть записи, которые выглядят следующим образом:

{'some_key': BinData(0,"S0me=Bas3=64=Enc0Ding")} 

Хотя я ожидал бы что-то вроде этого:

{'some_key': 'some_value'} 

Я заметил, что если я декодировать S0me=Bas3=64=Enc0Ding, я получаю ожидаемое значение, some_value.

Однако я все еще смущен, почему это происходит.

Я проверил свой код, и кажется, что я вставляю строки. Кроме того, ошибка не является общей. У меня все еще есть новые записи, вставленные правильно. Только некоторые из них вставляются как BinData.

вы знаете подводные камни, которые могут привести к этой проблеме, или есть какие-либо предложения о том, что для проверки в качестве потенциального источника эмиссии ли?

Реализуя quetion может быть слишком широким, я сужать его вниз, как это:

Какие типы объектов вставляются PyMongo в MongoDB, как BinData?

Спасибо!

EDIT

версия питона я использую 3,5. Хотя конкретная версия не имеет значения, факт, что я использую python 3.

ответ

0

Я нашел ошибку.

Один из моих методов возвращал байтовую строку вместо строки.

Например, если у вас есть это:

value = b'some_value' 
collection.insert_one({'some_key': value}) 

Вы в конечном итоге в Монго с:

{'some_key': BinData(0,"S0me=Bas3=64=Enc0Ding")} 

Я подозреваю, что это что-то делать с тем string и bytes больше не подклассы basestring.