新しいプロジェクトで使用していますが、MongoDB を使用するのも初めてです。mongo の利点は、スキーマを定義する必要がないことだと思ったので、スキーマを定義する必要はないようです。スキーマに関係なく、その場でオブジェクトを保存することはできませんか? それでは、なぜ私はしたいのですか?また、ドキュメントが不足しているため、mongo シェルで簡単に実行できるいくつかのことが、本来よりも難しくなっています。
4 に答える
Mongoose for MongoDBの最も優れている点は、挿入/更新するデータの自動検証が組み込まれていることです。Mongooseを使用すると、たとえば、ドキュメントが保存される前に発生するイベントを事前に定義することもできます。これは、作成する必要のあるコードを統合し、そのコードをアプリケーションロジックではなく、ドキュメントロジックの隣に配置するため、非常に強力です。
いくつかの例については、ミドルウェアと検証を確認してください。Githubのalexyoung/Nodepadには、models.jsファイルにいくつかの良い例があります。
定義済みのスキーマを事前に知っておくと便利です。そうしなければできない仮定を立てることができるからです。
たとえば、スキーマがある場合、フィールドPost
があると想定して、その存在をチェックせずに として使用できます。body
String
確かに、私の明確に定義されたモデルでも、その中にスキーマレス ドキュメントに相当するものを含めることができます。
mongoose.model('Post', new Schema({
body: String,
meta: {}
}));
そして、ランダムなデータを気まぐれに myPost.meta に非常に簡単に追加できます。定義済みのスキーマとスキーマレスの間で非常にバランスが取れています。
あなたは本当にそれでどちらの方法でも行くことができます。Java 用の Morphia、PHP 用の Doctrine、Ruby 用の Mongoid / Mongomapper など、他の多くの言語で MongoDB 用の人気のあるマッパーが多数あります。
MongoDB は「スキーマレス」ですが、「スキーマフリー」ではありません。DB から何を期待するかを知ることについては、言いたいことがあります。
もちろん、アドホック オブジェクトを作成して保存することについても、エレガントな点があります。現時点では、node.js は非常に新しいので、好きなものを使用するのがおそらく最善です。
また、ドキュメントが不足しているため、mongo シェルで簡単に実行できるいくつかのことが、本来よりも難しくなっています。
Mongoose はまだコミュニティ プロジェクトであり、比較的新しいものです。不足しているドキュメントや作成が必要なドキュメントがある場合は、開発チームが喜んでサポートしてくれるはずです。グループで彼らとつながることができるでしょう。
私は Mongoose を使用しましたが、事前にスキーマを定義すると MongoDB が大幅に制限されることに完全に同意します。Mongoose の背後にあるアイデアは、安全性を確保し、メンテナンスを容易にすることでしたが、ドキュメント ベースのデータベースにはあまり魅力的ではありませんでした。