模式类型(types)
原文:SchemaTypes 翻译:小虾米(QQ:509129)
SchemaTypes
SchemaTypes 为查询处理定义path defaults, validation, getters, setters, field selection defaults ,以及为了字符串和数值的其他一般特征。检查他们各自的的更多细节的 API 文档。
以下是所有有效的Schema Types。
Boolean
Mixed
Array
例子
var schema = new Schema({
name: String,
binary: Buffer,
living: Boolean,
updated: { type: Date, default: Date.now },
age: { type: Number, min: 18, max: 65 },
mixed: Schema.Types.Mixed,
_someId: Schema.Types.ObjectId,
array: [],
ofString: [String],
ofNumber: [Number],
ofDates: [Date],
ofBuffer: [Buffer],
ofBoolean: [Boolean],
ofMixed: [Schema.Types.Mixed],
ofObjectId: [Schema.Types.ObjectId],
nested: {
stuff: { type: String, lowercase: true, trim: true }
}
})
// example use
var Thing = mongoose.model('Thing', schema);
var m = new Thing;
m.name = 'Statue of Liberty';
m.age = 125;
m.updated = new Date;
m.binary = new Buffer(0);
m.living = false;
m.mixed = { any: { thing: 'i want' } };
m.markModified('mixed');
m._someId = new mongoose.Types.ObjectId;
m.array.push(1);
m.ofString.push("strings!");
m.ofNumber.unshift(1,2,3,4);
m.ofDates.addToSet(new Date);
m.ofBuffer.pop();
m.ofMixed = [1, [], 'three', { four: 5 }];
m.nested.stuff = 'good';
m.save(callback);
使用说明:
Dates
内置的日期的方法在mongoose用英语改变跟踪逻辑不是钩子,意味着如果您在文档中使用日期,并用类似的方法进行修改如setmonth()
,mongoose不知道这种变化,并且doc.save()
不会坚持这样的修改。如果你必须使用内置的方法修改日期类型,保存之前告诉mongoose关于doc.markModified('pathToYourDate')
的变化。
var Assignment = mongoose.model('Assignment', { dueDate: Date });
Assignment.findOne(function (err, doc) {
doc.dueDate.setMonth(3);
doc.save(callback); // THIS DOES NOT SAVE YOUR CHANGE
doc.markModified('dueDate');
doc.save(callback); // works
})
Mixed
一个“什么都行”的SchemaType,它的灵活性会带来权衡它难维护。混合类型可通过schema.types.mixed
或通过传递一个空的对象。以下是等价的:
var Any = new Schema({ any: {} });
var Any = new Schema({ any: Schema.Types.Mixed });
因为它是一个无模式的类型,您可以将值更改为其他任何你喜欢的东西,但是Mongoose失去自动检测和保存这些变化的能力。“告诉”Mongoose,混合型的价值观已经改变了,调用.markModified(path)方法使文档传递路径到您刚刚更改的混合类型。
person.anything = { x: [3, 4, { y: "changed" }] };
person.markModified('anything');
person.save(); // anything will now get saved
ObjectIds
指定一个ObjectId类型,使用Schema.Types
。ObjectId在你的声明中。
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var Car = new Schema({ driver: ObjectId });
// or just Schema.ObjectId for backwards compatibility with v2
Arrays
提供创建数组的SchemaTypes
或子文档。
var ToySchema = new Schema({ name: String });
var ToyBox = new Schema({
toys: [ToySchema],
buffers: [Buffer],
string: [String],
numbers: [Number]
// ... etc
});
注:指定一个空数组是相当于混合类型(Mixed
)。以下所有创建混合数组:
var Empty1 = new Schema({ any: [] });
var Empty2 = new Schema({ any: Array });
var Empty3 = new Schema({ any: [Schema.Types.Mixed] });
var Empty4 = new Schema({ any: [{}] });
创建自定义类型
Mongoose也可以扩展自定义 SchemaTypes 。搜索兼容类型的插件站点,如, mongoose-long,mongoose-int32以及其他类型。要创建您自己的自定义schema,请看一看创建基本的自定义schema类型。
下一步
既然我们已经掌握了SchemaTypes,让我们看一看模型。
Last updated
Was this helpful?