2017-02-22 106 views
0

我一直在机器上使用pymongo 3.3.0mongo 3.2.10一段时间。最近,我注意到我的一些记录是用BinData类型插入的,而不是字符串,这正是我期望的。pymongo将哪些对象类型作为BinData插入到mongodb中?

我现在有看起来像这样的记录:

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

虽然我本来期望是这样的:

{'some_key': 'some_value'} 

我注意到,如果我解码S0me=Bas3=64=Enc0Ding,我得到的预期值, some_value

但是,我仍然对这种情况发生的原因感到困惑。

我检查了我的代码,看来我插入了字符串。此外,该错误并不普遍。我仍然有正确插入的新记录。只有其中一些插入为BinData。

您是否知道可能导致此问题的任何疑难问题,或者有什么 建议要检查哪些问题是潜在的问题来源?

实现quetion可能过于宽泛,我将它缩小这样的:

通过pymongo插入的MongoDB什么对象类型为BinData?

谢谢!

编辑

我使用的Python版本是3.5。虽然具体版本并不重要,但我使用python 3的事实确实如此。

回答

0

我发现了这个错误。

我的方法之一是返回一个字节字符串,而不是一个字符串。

举例来说,如果你有这样的:

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

您将在蒙戈结束:

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

我怀疑这是与事实stringbytes不再basestring的子类。

相关问题