2016-10-22 15 views
0

私はexpress.jsでmongooseを使用していますマングースモデルを再利用する戦略

私は動的にモデルを作成しました。

var schema = mongoose.Schema({ data: String }, { timestamps: true }); 

var model = mongoose.model(result.siteId, schema); 

    var data = new model({ 
     data: JSON.stringify(req.body) 
    }); 

    data.save(function (err, result) { 
     if (err) { 
      res.status(400).json({ 
       success: false 
      }); 
     } else { 
      res.status(200).json({ 
       success: true, 
       data: result 
      }); 
     } 
    }); 

これは作成モデルのこの部分です。 (データ入力部) サーバーがリクエストを取得すると、リクエストのsiteIdがモデルの名前になります。それは正常に動作します。 問題はこの作成されたモデルを使用しています。 このmongodbテーブルが必要です。だから私はモデルを再宣言しますが、うまくいきません。

var datas = mongoose.model('modelname', {data: String}); 

このモデルを宣言してください。 'データ入力部'(上位コード)が動作しておらず、サーバーの応答とタイムアウトのメッセージが停止しています。 他のモデル名を使用している他の 'データ入力部'が動作しています。

私はモンゴースが再宣言モデルから停止したと思います。 他のjsファイルを宣言して使用したい。 modelsnameは動的名でなければなりません。

適切な方法は何ですか?

答えて

0

Schemaを別の名前で再利用しようとすると同様の問題があり、コレクション名をSchemaの作成にも提供することで、それを稼働させることができました。

collection paramをスキーマ作成オプションに追加することで、同様のことが達成できます。

しかし、その後、あなたは、各modelに異なるSchemaオブジェクトを必要とするので、私は

var buildModel = function(collectionName) { 

    var schema = mongoose.Schema({ data: String }, { timestamps: true, collection: collectionName }); 

    return mongoose.model(collectionName, schema); 
} 

var model = buildModel(result.siteId); 

var data = new model({ 
    ... 
のように、コレクション名に基づいて、モデルを取得するための関数を作成することをお勧め
関連する問題