2017-01-31 8 views
3

を取得し、私は以下のようにtype_of方法を探しています:PythonのBSONライブラリ:BSONエイリアス

import bson 
bson.type_of(42) # it should return "int". 
bson.type_of("hello") # it should return "string". 
type("hello").__name__ # it returns "str" and not "string" therefore no suitable. 

私は(intstring)欲しい結果は(https://docs.mongodb.com/manual/reference/bson-types/を参照)BSONの別名です。

このメソッドtype_ofは既に存在しますか?

型の数字(Doubleの場合は1、Stringの場合は2 ...)が返されても問題ありません。

は、

編集ありがとう:ここ を一瞬私が持っているソリューションです。

type_of = { 
    type(2.5).__name__: "number", 
    type(1).__name__: "number", 
    type("a_string").__name__: "string", 
    type([1, 2]).__name__: "array", 
    type(True).__name__: "bool" 
} # type_of[type(3).__name__] returns "number" 

答えて

1

あなたは(数はBSONタイプではありません)実際のBSONタイプをしたい場合は私はありません確かに道がある。これらの「種類」はBSON仕様と一致していないが、彼らは、過去に私を助けるために十分だった:

def what_bson_type(input): 
    import bson 
    return bson._ELEMENT_GETTER[bson.BSON.encode({"t":input})[4]].__name__[5:] 

注:私はオブジェクトをエンコードします何のpythonソート助けるために、この機能を使用しました。

>>> what_bson_type("hi") 
'string' 
>>> what_bson_type(1) 
'int' 
>>> what_bson_type(sys.maxint) 
'int64' 
>>> what_bson_type(True) 
'boolean' 
>>> what_bson_type({"a":"b"}) 
'object' 
>>> what_bson_type(1.2) 
'float' 
>>> what_bson_type([1,2]) 
'array' 
>>> what_bson_type(re.compile(r".*")) 
'regex' 
>>> what_bson_type(bson.Binary("hi")) 
'binary' 
+0

ありがとうございました。確かに、このタイプは私が探しているタイプではありません。しかし、私はbsonライブラリから私を助ける方法を探します。 – Matias

関連する問題