web-dev-qa-db-ja.com

マングーススキーマ作成

私はマングースで始めたばかりです。サンプルデータを使用してスキーマとdbを作成するmongooseを使用した作成スクリプトがあります。

次に、実際のアプリケーションを作成します。アプリケーションを実行するたびにスキーマオブジェクトを作成する必要がありますか、それとも既に何らかの形で利用可能ですか?

つまり、mongooseを使用してdbにアクセスするすべてのアプリで、または初めて初めてこのコードを実行する必要がありますか。

var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});

セッター/検証/などがある場合、答えはどのように変わりますか?

43
Yaron Naveh

Schemaを定義するので、アプリケーションはMongoDBからJavaScriptオブジェクトにデータをマップする方法を理解します。 Schemaはアプリケーションの一部です。データベースに関係するnothingがあります。データベースをJavaScriptオブジェクトにマップするだけです。はい-ニースマッピングが必要な場合は、このコードをeveryが必要なアプリケーションで実行する必要があります。また、ゲッター/セッター/検証/などにも適用されます。

ただし、これを行うことに注意してください。

_var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});
mongoose.model("Comments", Comments);
_

Schemaをグローバルに登録します。これは、実行中のアプリケーションが外部モジュールを使用している場合、このモジュールでは単に使用できることを意味します

_var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
    // some code here
});
_

(このコードを使用する前に、実際にSchemaを登録する必要があることに注意してください。そうしないと、例外がスローされます)。

ただし、これらはすべて1つのノードセッション内でのみ機能するため、Schemaへのアクセスが必要な別のノードアプリを実行している場合は、登録コードを呼び出す必要があります。したがって、すべてのスキーマを個別のファイルで定義することをお勧めします。たとえば、_comments.js_は次のようになります。

_var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post

module.exports = function() {
    var Comments = new Schema({
        title     : String
      , body      : String
      , date      : Date
    });
    mongoose.model("Comments", Comments);
};
_

次に、このようなファイル_models.js_を作成します

_var models = ['comments.js', 'someothermodel.js', ...];

exports.initialize = function() {
    var l = models.length;
    for (var i = 0; i < l; i++) {
        require(models[i])();
    }
};
_

require('models.js').initialize();を呼び出すと、指定されたノードセッションのすべてのスキーマが初期化されます。

77
freakish

アプリを実行するたびにこの初期化コードを実行して、アプリのスキーマをmongooseに登録する必要があります。

アプリが終了すると、mongooseはスキーマを保存しません。そのため、次にスキーマを使用するアプリを実行するときには、スキーマを再度登録する必要があります。

ただし、そうするようにアプリを設定するのはかなり簡単です。

以下は、mongooseでスキーマを初期化する方法を示すコードへの2つのリンクです。 1つ目はJavaScriptで、2つ目はCoffeeScriptです。

https://github.com/fbeshears/register_models

https://github.com/fbeshears/register_coffee_models

JavaScriptデモは1つのアプリにすぎません。

CoffeeScriptコードには2つの個別のアプリがあります。最初はMongoDBでドキュメントを保存し、2番目は最初のアプリで保存されたドキュメントを検索して表示します。

4
fbeshears