19

Mongoose は、デフォルトですべてのフィールドを不要にするようです。次の各フィールドを変更せずに、すべてのフィールドを必須にする方法はありますか?

Dimension = mongoose.Schema(
  name: String
  value: String
)

Dimension = mongoose.Schema(
  name:
    type: String
    required: true
  value: 
    type: String
    required: true
)

たくさん持っているのでとても見苦しくなります。

4

7 に答える 7

12

私はこれをやってしまった:

r_string = 
  type: String
  required: true 

r_number = 
  type: Number
  required: true

他のデータ型についても同様です。

于 2015-01-22T02:54:46.513 に答える
11

次のようなことができます。

var schema = {
  name: { type: String},
  value: { type: String}
};

var requiredAttrs = ['name', 'value'];

for (attr in requiredAttrs) { schema[attr].required = true; }

var Dimension = mongoose.schema(schema);

またはすべての attrs (アンダースコアを使用して、素晴らしいです):

var schema = {
  name: { type: String},
  value: { type: String}
};

_.each(_.keys(schema), function (attr) { schema[attr].required = true; });

var Dimension = mongoose.schema(schema);
于 2014-08-07T14:41:40.743 に答える
6

すべてのフィールド プロパティはschema.paths[attribute]またはにschema.path(attribute)あります。

適切な方法の 1 つ: フィールドが必須ではない場合を定義し、

Schema = mongoose.Schema;
var Myschema = new Schema({
    name : { type:String },
    type : { type:String, required:false }
})

デフォルトでそれらをすべて必須にします:

function AllFieldsRequiredByDefautlt(schema) {
    for (var i in schema.paths) {
        var attribute = schema.paths[i]
        if (attribute.isRequired == undefined) {
            attribute.required(true);
        }
    }
}

AllFieldsRequiredByDefautlt(Myschema)

アンダースコアの方法:

_=require('underscore')
_.each(_.keys(schema.paths), function (attr) {
    if (schema.path(attr).isRequired == undefined) {
        schema.path(attr).required(true);
    }
})

試して :

MyTable = mongoose.model('Myschema', Myschema);
t = new MyTable()
t.save()
于 2015-02-06T12:40:42.157 に答える
3

スキーマ オブジェクトを走査し、各フィールドが必須になるように調整するマングース スキーマ プラグイン関数を作成できます。次に、スキーマごとに 1 行だけ必要です: Dimension.plugin(allRequired)

于 2013-11-04T06:26:14.187 に答える
2

Mongoose はすべてのフィールドを設定する方法を提供していませんでしたが、再帰的に行うことができました。

ピーターが述べたように、コードを再利用するためにプラグイン化できます。

再帰的に設定:

// game.model.js
var fields = require('./fields');
var Game = new Schema({ ... });

for(var p in Game.paths){
  Game.path(p).required(true);
}

プラグイン:

// fields.js
module.exports = function (schema, options) {
  if (options && options.required) {
    for(var p in schema.paths){
      schema.path(p).required(true);
    }
  }
}

// game.model.js
var fields = require('./fields');
var Game = new Schema({ ... });
Game.plugin(fields, { required: true });
于 2014-11-06T08:51:15.217 に答える
0

Mongoose でこれを行う簡単な方法があるかどうかはわかりませんが、IDE/エディターで次のようにします。

通常どおりにフィールドをリストします。

Dimension = mongoose.Schema(
  name: String
  value: String
)

次に、検索と置換を実行して、次のようにString置き換え{type: String, required: true},ます。

Dimension = mongoose.Schema(
  name: {type: String, required: true},
  value:  {type: String, required: true},
)

次に、Numberおよび他のタイプについても同じことを行います。

于 2013-11-04T06:02:46.547 に答える