可以創建自定義的數據類型作爲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的「類型插件」才能使用該類型。