2014-09-04 88 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的“类型插件”才能使用该类型。