25

MongoDB のコレクションのドキュメントを更新する一般的な方法はありますか?

次のコードは、ファイル名Deleter.jsにあります。

module.exports.MongooseDelete = function (schemaObj, ModelObject);
{
  var ModelObj = new mongoose.Model("collectionName",schemaObj);
  ModelObj.remove(ModelObject);
}

そして、私のメインファイルapp.jsで次のように呼び出します:

var ModObj = mongoose.model("schemaName", schemasObj);
var Model_instance = new ModObj();
var deleter = require('Deleter.js');
deleter.MongooseDelete(schemasObj,Model_instance);

次のエラーが表示されます:

OverwriteModelError: Cannot overwrite `undefined` model once compiled.
    at Mongoose.model (D:\Projects\MyPrjct\node_modules\mongoose\lib\index.js:4:13)

私は2番目のメソッド呼び出しのみに参加します..誰かが解決策を持っているかどうか教えてください.

4

7 に答える 7

49

私は次のように問題を解決することができました:

var Admin;

if (mongoose.models.Admin) {
  Admin = mongoose.model('Admin');
} else {
  Admin = mongoose.model('Admin', adminSchema);
}

module.exports = Admin;
于 2014-10-06T13:39:19.863 に答える
33

mongoose.Model()同じスキーマで 2 回インスタンス化したと思います。各モデルを一度だけ作成し、必要なときにそれらを取得するためのグローバル オブジェクトを用意する必要があります。

ディレクトリの下の異なるファイルで異なるモデルを宣言すると仮定します$YOURAPP/models/

$YOURAPPDIR/models/
 - index.js
 - A.js
 - B.js

index.js

module.exports = function(includeFile){
    return require('./'+includeFile);
};

A.js

module.exports = mongoose.model('A', ASchema);

B.js

module.exports = mongoose.model('B', BSchema);

app.js で

APP.models = require('./models');  // a global object

そして、あなたがそれを必要とするとき

// Use A
var A = APP.models('A');
// A.find(.....

// Use B
var B = APP.models('B');
// B.find(.....
于 2013-03-06T14:28:00.027 に答える
4

実際の問題は、mongoose.model()インスタンス化が 2 回行われることではありません。問題は、Schemaが複数回インスタンス化されることです。たとえば、mongoose.model("Model", modelSchema)n回実行し、スキーマへの同じ参照を使用している場合、これはマングースにとって問題にはなりません。問題は、同じモデルでスキーマの別の参照を使用する場合に発生します。

var schema1 = new mongoose.Schema(...);
mongoose.model("Model", schema1);
mongoose.model("Model", schema2);

これは、このエラーが発生したときの状況です。

ソースを見ると、(mongoose/lib/index.js:360)これはチェックです

if (schema && schema.instanceOfSchema && schema !== this.models[name].schema){
    throw new mongoose.Error.OverwriteModelError(name);
}
于 2016-05-23T22:45:37.157 に答える
0

私はこのコードで解決しました:

  module.exports = mongoose.models.nameOne || mongoose.model('nameOne', PostSchema);
于 2021-11-26T10:27:51.853 に答える