2017-02-22 1 views
0

Ich habe mit pymongo 3.3.0 und mongo 3.2.10 auf einer Ubuntu 14.04 Maschine für eine Weile gearbeitet. Kürzlich habe ich festgestellt, dass einige meiner Datensätze mit BinData-Typ anstelle von String eingefügt werden, was ich erwarte.Welche Objekttypen werden von Pymongo in mongodb als BinData eingefügt?

Ich habe jetzt Datensätze, die wie folgt aussehen:

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

Obwohl ich so etwas wie dies erwartet hätte:

{'some_key': 'some_value'} 

ich bemerkt, dass, wenn ich S0me=Bas3=64=Enc0Ding dekodieren, ich den erwarteten Wert zu erhalten, some_value.

Allerdings bin ich immer noch verwirrt, warum das passiert.

Ich habe meinen Code überprüft und es scheint, dass ich Strings einfüge. Darüber hinaus ist der Fehler nicht allgemein. Ich habe noch neue Datensätze korrekt eingefügt. Nur einige von ihnen werden als BinData eingefügt.

Haben Sie gotchas wissen, die zu diesem Problem führen könnten, oder irgendwelche Vorschläge auf, was als eine mögliche Ursache des Problems zu überprüfen?

Realisierung der quetion könnte zu breit sein, werde ich es verengen, wie dies unten:

Welche Objekttypen von pymongo in mongodb als BinData eingeführt werden?

Vielen Dank!

EDIT

Die Python-Version I ist 3,5 verwenden. Während die spezifische Version keine Rolle spielt, macht die Tatsache, dass ich Python 3 verwende.

Antwort

0

Ich habe den Fehler gefunden.

Eine meiner Methoden war die Rückgabe einer Byte-Zeichenfolge anstelle einer Zeichenfolge.

Zum Beispiel, wenn Sie dies:

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

Sie werden in Mongo am Ende mit:

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

Ich vermute, das etwas mit der Tatsache zu tun hat string und bytes nicht mehr Unterklassen von basestring.

Verwandte Themen