2012-10-28 35 views
28

私はmongodbの超初心者です。私はnode.jsからmongodbにアクセスするためにmongooseを使用していますが、動作させる方法を知っていますが、なぜそれが動作するのか理解できないと思います。mongooseは、mongodbのメリットがスキーマレスであると考えられる場合、なぜスキーマを使用しますか?

最も重要なことに、私はmongooseの傑出した特徴の1つがスキーマを持たないという理由で、mongooseが 'スキーマ'を持つ理由を理解できません。誰かが私を啓発できますか?ありがとうございました。

+1

私は、デフォルトのスキーマのケースだと思いますが、テーブル全体を変更することなくアプリケーションコード内にフィールドを動的に追加することができます。例は、製品の巨大なテーブルであり、それは厄介で遅いSQLへのフィールドを追加するだけで、MongoDBではそれをクライアントモデルに追加するだけです。 – Sammaye

+0

MongoDBはスキーマレスではありません。柔軟なスキーマがあります。大きな違いがあります。 –

+0

それは味の問題です、Mongooseはあなたがそれを取得していないドライバを使用し、自分自身をロールバックする必要がある場合、検証付きの型付きスキーマを持つことができます。一方、Mongooseの層は生のドライバーに余分な時間を要するハウスキーピングを少し行うので、いくらかの生のパフォーマンスに影響を与えます。 – christkv

答えて

22

スキーマのないデータは役に立たない。あなたはMongoDBから文書を手に入れました。何をしていますか?いくつかのフィールドを読む?これらのフィールドの名前、タイプ、意味を知る必要があります。それはスキーマです。

MongoDBに「スキーマがない」と言うと、実際にはSQLデータベースのやり方でスキーマを強制しないということです。 MongoDBは、スキーマの問題をアプリケーションレベルまでプッシュします。アプリケーションレベルでは、より柔軟に対応できます。たとえば、ドキュメントに新しいフィールドを追加するには、コレクションに「すべて」または「まったくなし」のALTERを実行する必要はありません。そのフィールドをODM(Mongoose)スキーマに追加するだけです。

+4

は完全に真ではありません。オンザフライで作成されたフィールドに依存できるリアルタイムアプリがあります。 Mongooseモデルへのフィールドの追加は、新しい展開プロセスを意味します。固定スキーマ定義を必要としないODM(Mongoritoなど)があります。 –

+0

カスタムフィールドについて聞いたことがありますか?クライアントが独自のスキーマを定義できるようにしたいとします。顧客ごとに開発者の変更コードを持たなくても、独自のコレクションに保存することができます。これは、スキルレス設計のための完全な使用例です。 –

+0

@TimHardy「独自のスキーマを定義する」と言うが、それを「スキーマレス」と呼ぶ。そこに矛盾があるのか​​?私は「静的スキーマのないデータは役に立たない」とは言いませんでした。 –

関連する問題