2014-09-04 84 views
0

的屬性我有一個數據模型,看起來像這樣:設置數據模型作爲不同的數據模型

var PersonSchema = new Schema({ 
    id: String, 
    fruit: Fruit 

}); 


var FruitSchema = new Schema({ 
    type: String, 
    calories: Double 
}); 

是否可以設置自定義對象的數據類型?我正在使用快遞&貓鼬。

回答

1

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