Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。
background
firestore からデータを取得する良い方法を探して公式ドキュメントを眺める。
すると、
一部の言語では、カスタムのオブジェクト タイプを使用する方が便利な場合が多くあります。
と書いてあるではないか?
doc_ref = db.collection(u'cities').document(u'BJ') doc = doc_ref.get() city = City.from_dict(doc.to_dict()) print(city)
City
というカスタムのオブジェクトタイプに戻すのか。pythonはどうやらfrom_dict
関数によってサポートされているらしい。
カスタムのオブジェクトタイプとは?
どうやらデータの追加のセクションにあるらしい。
つぎのような心強いお言葉が。
Cloud Firestore では、カスタムクラスを使ったドキュメント作成をサポートしています。 Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。
Webのサンプルコードは次の様。
class City(object): def __init__(self, name, state, country, capital=False, population=0, regions=[]): self.name = name self.state = state self.country = country self.capital = capital self.population = population self.regions = regions @staticmethod def from_dict(source): # ... def to_dict(self): # ... def __repr__(self): return( f'City(\ name={self.name}, \ country={self.country}, \ population={self.population}, \ capital={self.capital}, \ regions={self.regions}\ )' )
肝心な from_dict
クラスは省略されている。このカスタムオブジェクトクラスも、単なる object
クラスから作られていない?
Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。
ってどういう意味だろう。日本語の翻訳誤りかな。英語で見てみると、
Cloud Firestore converts the objects to supported data types.
誤りはなさそうだ。。。だが、何もサポートされていないじゃないかな…。一応コードを見てみる。
全部自前でやってるじゃないか。どこにもライブラリでなんとかしている箇所がない。
まとめ
Cloud Firestore は、オブジェクトをサポートされているデータ型に変換しません。 ご自分で頑張って下さい。