44

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

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

つまり、マングースを使用してデータベースにアクセスするすべてのアプリで、または初めてこのコードを実行する必要がありますか?

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

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

4

2 に答える 2

76

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

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

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();と、特定のノード セッションのすべてのスキーマが初期化されます。

于 2012-04-10T04:35:51.920 に答える
4

アプリのスキーマを 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 つの個別のアプリがあります。1 つ目は MongoDB を使用してドキュメントを保存し、2 つ目は最初のアプリによって保存されたドキュメントを検索して表示します。

于 2013-03-18T00:26:15.897 に答える