可以创建自定义的数据类型作为documentation被称为,但这些通常是针对“数据类型”,并“插件”,例如mongoose-long提供与预期的行为,新的数据类型。
但您似乎指的是引用另一个“架构”来定义存储在字段中的内容,这是一种不同的情况。因此,您不能只是将模式作为字段的“类型”来放置,因为事实上,如果您尝试过,您会得到一个“类型错误”,其中会显示一条消息,告诉您无法执行您正在尝试执行的操作。要做到这一点,最好的办法是简单地内联定义:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var personSchema = new Schema({
name: String,
fruit: {
name: { type: String },
calories: { type: Number }
}
});
var Person = mongoose.model("Person", personSchema);
var person = new Person({
"name": "Bill",
"fruit": {
"name": "Apple",
"calories": 52
}
});
console.log(person);
这是允许的,但它并没有真正与再利用帮助。当然,如果你能忍受它,那么另一种方法是简单地在阵列内嵌入,你是否打算存储多个与否:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var fruitSchema = new Schema({
name: String,
calories: Number
});
var personSchema = new Schema({
name: String,
fruit: [fruitSchema]
});
var Person = mongoose.model("Person", personSchema);
var person = new Person({
"name": "Bill",
"fruit": [{
"name": "Apple",
"calories": 52
}]
});
console.log(person);
但实际上这些只是JavaScript对象,因此,如果只是你要重用一些在几个模式定义,那么所有你需要做的是定义对象,甚至可能在它自己的模块,然后就“规定”在希望的对象使用它:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var Fruit = {
name: String,
calories: Number
};
var personSchema = new Schema({
name: String,
fruit: Fruit
});
var Person = mongoose.model("Person", personSchema);
var person = new Person({
"name": "Bill",
"fruit": {
"name": "Apple",
"calories": 52
}
});
此外还要注意,您的商家信息中的“Double”不是标准类型,并且确实需要mongoose-double的“类型插件”才能使用该类型。