乐闻世界logo
搜索文章和话题

How to define a generic nested object in Mongoose

4 个月前提问
3 个月前修改
浏览次数30

1个答案

1

在 Mongoose 中,定义通用的嵌套对象通常涉及使用 SchemaTypes 如 Mixed 或者定义具体的子文档结构。在一个数据模型中使用嵌套对象,可以让模型更加灵活且能够存储多变的数据结构。

使用 SchemaType Mixed

使用 Mixed 类型可以存储任何类型的数据,这对于不确定具体数据结构的情况非常有用。但是,它也意味着失去了 Mongoose 提供的一些数据校验和类型检查的特性。使用 Mixed 类型的一个基本示例是:

javascript
const mongoose = require('mongoose'); const { Schema } = mongoose; const userSchema = new Schema({ name: String, additionalInfo: mongoose.Schema.Types.Mixed // 可以是任何结构 }); const User = mongoose.model('User', userSchema); const newUser = new User({ name: 'John Doe', additionalInfo: { age: 30, hobbies: ['reading', 'gaming'], address: { street: '123 Main St', city: 'Anytown' } } }); newUser.save();

定义具体子文档结构

另一种方法是定义嵌套对象的具体结构。这样做的好处是可以利用 Mongoose 的所有数据校验和类型检查的功能。这种方法适用于你知道将要存储的数据结构的情况。示例代码如下:

javascript
const addressSchema = new Schema({ street: String, city: String }); const userSchema = new Schema({ name: String, additionalInfo: { age: Number, hobbies: [String], // 定义为字符串数组 address: addressSchema // 使用定义好的子文档模式 } }); const User = mongoose.model('User', userSchema); const newUser = new User({ name: 'John Doe', additionalInfo: { age: 30, hobbies: ['reading', 'gaming'], address: { street: '123 Main St', city: 'Anytown' } } }); newUser.save();

在这个例子中,我们定义了一个 addressSchema 子文档,然后在主文档 userSchema 中以特定的结构引用了它。这种方法提供了更多的结构和数据完整性。

总结

选择 Mixed 类型或者具体定义子文档,应根据实际应用场景的需要考虑。如果数据结构非常灵活,使用 Mixed 可能更合适。对于结构相对固定且需要良好数据校验的场景,定义具体的子文档结构是更好的选择。

2024年6月29日 12:07 回复

你的答案