LoginSignup
0
1

More than 3 years have passed since last update.

Django3+DjongoでMongoDBを触ってみた

Last updated at Posted at 2021-02-11

TL;DR

  • REST API Frameworkとセットで使うなら良いライブラリだと思います
  • MongoDBとしての機能を使いこなすのは少し難しそう

概要

簡単なWebアプリを作る時に最近の流行りだったらNuxt.js+FastAPIないしDjango+REST API Frameworkかなあと思ったのですが時間も手間も無いのでMTVモデルでDBをDjangoに据えてやってみた感想

Djongoとは

良いと思った所

  • スキーマレス
  • OneToOne/OneToManyのモデルの定義に対しても良い感じに振る舞ってくれる
    • Aggreation pipelineを書く手間が省ける
  • JSON型のサポート2
    • 何でも突っ込めるので雑に設計しても困らない
  • MongoDBに依存したコード(Djongo/Pymongo実装のクラス)が少なければデータベースの変更が容易

不満が残る所

  • Transactionが未サポート( 'ATOMIC_REQUESTS'=True も効かない)
  • ModelにIndexを張ってmigrate…みたいな事が出来ない
    • Modelに適当にIndexに対する定義を書いておいてCommandでスキャンしたModelの該当の箇所を読んでpymongoのcreate_index関数でIndex作成……みたいな事をするか、手動でIndexを張るクエリを発行する必要あり
      • 有償版のDjongoNxtなら出来るよ!
  • $search や一部クエリの未サポート
    • 有償版の(略)3
  • AUTO_INCREMENTな採番処理はもちろん使えない4
  • MTVモデルでの使われ方をあまり考慮されていない
    • ObjectIdのフィールド( _id )をTemplateから使うにはフィールド名をゴニョるために一工夫要るとか
    • Djongoのフィールドとして提供されているArrayField等のいわるゆJSON型のカラムをFormに埋め込むのがメチャクチャハマる
      • 基本的にやり取りはJSONで行われている前提で考えられているのでMTVモデルでDjongoを使おうと思った場合はフレームワークとライブラリの恩恵に与れない事は理解しておく必要がありそう
  • シャーディングできない気がする
    • Modelにそういうメタデータあったらいいんだけど
  • コミュニティが弱い
    • Django3.1をサポートしていない
      • 2021.2.1リリースのバージョンでの依存関係は >=2.1,<=3.0.5
      • 新しいリリースに対する依存関係のサポートはあまり強くない
      • DjangoDjongo のバージョン下げたら治った、みたいな強烈なIssue56があったりする
    • GitHubのIssueは結構Openステータスのものが残っている
      • 使い込んでゆくと色々出てきそう
    • 有償版の存在によってコミュニティが分断されている気がする。
      • ○○できない->有償版なら出来る(contributeの機会が無い)
      • ○○がバグってる->「……」

結論

プロトタイピングなら最適。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1