Вы можете создавать собственные типы данных, как указано в 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, чтобы использовать что.