gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:54:08 25 4
gpt4 key购买 nike

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

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

});


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

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

最佳答案

您可以创建自定义数据类型,如 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 的“类型插件”以便使用它。

关于javascript - 将数据模型设置为不同数据模型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25676528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com