将数据模型设置为不同数据模型的属性

时间:2014-09-04 23:32:27

标签: javascript node.js mongodb mongoose

我有一个如下所示的数据模型:

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

});


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

是否可以将自定义对象设置为数据类型?我正在使用Express&猫鼬。

1 个答案:

答案 0 :(得分:1)

您可以创建documentation中引用的自定义数据类型,但这些数据类型通常用于"数据类型"并且是"插件"例如mongoose-long提供具有预期行为的新数据类型。

但你似乎指的是引用另一个" Schema"定义存储在字段中的内容,这是一种不同的情况。所以你不能只是像#34;类型"那样放入一个模式。对于一个领域,事实上,如果你尝试过,你会得到一个"类型错误"哪条消息告诉你你不能做你想做的事。最好的方法是简单地内联定义:

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对象,所以如果它只是你想在几个模式定义中重用的东西那么你需要做的就是定义对象,甚至可能在它自己的模块中然后只是& #34;需要"您要使用它的对象:

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以便使用它。