max*_*o87 16 schema mongoose mongodb node.js
Mongoose似乎默认使所有字段不是必需的.是否有任何方法可以在不更改每个字段的情况下生成所有字段:
Dimension = mongoose.Schema(
name: String
value: String
)
Run Code Online (Sandbox Code Playgroud)
至
Dimension = mongoose.Schema(
name:
type: String
required: true
value:
type: String
required: true
)
Run Code Online (Sandbox Code Playgroud)
它会变得非常难看,因为我有很多这些.
190*_*Man 10
你可以这样做:
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);
Run Code Online (Sandbox Code Playgroud)
或所有的attrs(使用下划线,这是很棒的):
var schema = {
name: { type: String},
value: { type: String}
};
_.each(_.keys(schema), function (attr) { schema[attr].required = true; });
var Dimension = mongoose.schema(schema);
Run Code Online (Sandbox Code Playgroud)
我最终这样做了:
r_string =
type: String
required: true
r_number =
type: Number
required: true
Run Code Online (Sandbox Code Playgroud)
以及其他数据类型.
所有字段属性都在schema.paths[attribute]或中schema.path(attribute);
一种正确的方法:定义何时不需要字段,
Schema = mongoose.Schema;
var Myschema = new Schema({
name : { type:String },
type : { type:String, required:false }
})
Run Code Online (Sandbox Code Playgroud)
并默认使它们全部必需:
function AllFieldsRequiredByDefautlt(schema) {
for (var i in schema.paths) {
var attribute = schema.paths[i]
if (attribute.isRequired == undefined) {
attribute.required(true);
}
}
}
AllFieldsRequiredByDefautlt(Myschema)
Run Code Online (Sandbox Code Playgroud)
下划线方式:
_=require('underscore')
_.each(_.keys(schema.paths), function (attr) {
if (schema.path(attr).isRequired == undefined) {
schema.path(attr).required(true);
}
})
Run Code Online (Sandbox Code Playgroud)
测试一下:
MyTable = mongoose.model('Myschema', Myschema);
t = new MyTable()
t.save()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18721 次 |
| 最近记录: |