MongoDBを使用すると、JSONオブジェクトを保存して完全な形式で取得できるため、ORMレイヤーは実際には必要なく、データのやり取りに費やすCPU時間も少なくて済みます。MongoDBの背後にいる開発者は、データベースの水平スケーリングの優先度を高くし、任意のJavascriptコードを実行して、DB側でデータを前処理できるようにしました(データのmap-reduceスタイルのフィルタリングを可能にします)。
しかし、これらの利益のためにいくつかを失います:レコードに参加することはできません。実際、保存するJSON構造は、SQLの結合を介してのみ実行できますが、MongoDBでは、データに対してその1つの構造しかありませんが、SQLでは、さまざまなクエリを実行して、データを別の方法でより簡単に表現できます。データベースで多くの分析を行う必要がある場合、MongoDBはそれを困難にします。
私の意見では、MongoDBのクエリ言語は、SQLよりも「ラフ」です。これは、クエリ機能が無計画に「感じ」て、一部は有効なJSONになり、一部は文字通り同じことを行ういくつかの方法があり、いくつかは他の方法ほど有用ではないか、定期的にフォーマットされていない古い方法です。また、SQLの単純な行ベースの設計に比べて配列とサブオブジェクトの種類が複雑になるため、構文は、定義した値の一部を含み、定義したすべての値を含む配列のクエリを処理できる必要があります。定義した値のみを含み、何も含まない定義した値の 同じ区別がオブジェクトキーとその値にも当てはまり、これによりクエリ構文が理解しにくくなります。(エッジケースの必要性はわかり$where
ますが、データのすべてのレコードで実行され、ブール値を返すjavascript関数を受け取るクエリパラメーターは、必要なオブジェクトを簡単に定義できるため、サイレンの曲です。戻るかどうかはわかりませんが、データベース内のすべてのレコードで実行する必要があり、インデックスは使用できません。)
つまり、何をしたいかによって異なりますが、Google Docsクローン用であると言うので、おそらくドキュメント表現以外の表現は気にせず、ドキュメントに基づいてクエリを実行するだけです。 ID、ドキュメント名、または所有者のID /名前、クエリで複雑すぎることはありません。
次に、ユーザーが編集しているドキュメントのJSON表現を取得し、それをデータベースにスローして、これらの重要なフィールドに自動的にインデックスを付けることができるので、新しいデータベースを学習する価値があります。