我想使用猫鼬根据条件动态定义架构
new mongoose.Schema({
type: String, //BASIC OR ADVANCE
// only for type = BASIC
name: String,
age: Number
/*
want these fields too but only if type = ADVANCE
email: String,
password: Number
PhoneNumber: String
*/
});
我如何使用猫鼬实现这种模式。
答案 0 :(得分:0)
这取决于您对数据库的处理方式。您可以简单地创建两种类型的标识符,分别是Advance和Basic,并使用中间件来维护流程。现在回答您的问题: 像这样:
new mongoose.Schema({
type: String, //BASIC OR ADVANCE
// only for type = BASIC
name: String,
age: Number,
advance: []
现在您可以检查Advance是否为空。严重地,这完全取决于您的方法以及如何处理问题。声明架构后,您可以不使用advance字段,仍然可以保存数据,例如:
const MyModel = mongoose.model('Test', new Schema({ name: String }));
const doc = new MyModel();
doc.advance = {
email: "test@test.com",
password: 1234,
PhoneNumber: 1234
}
doc.save();
但是使用这种结构,如果您想了解Schema,您会认为在文件中只有name
和age
,后来当您开始探索时,您会发现您正在执行类似操作并使用适当的结构。
可以将Moongoose文档视为JavaScript对象,这有一个被称为非结构化数据的原因。希望这个解释有帮助。