我如何根据node.js中的其他字段值动态创建猫鼬模式?

时间:2019-09-20 08:21:12

标签: node.js mongodb mongoose

我想使用猫鼬根据条件动态定义架构

架构

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
*/

});

我如何使用猫鼬实现这种模式。

1 个答案:

答案 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,您会认为在文件中只有nameage,后来当您开始探索时,您会发现您正在执行类似操作并使用适当的结构。 可以将Moongoose文档视为JavaScript对象,这有一个被称为非结构化数据的原因。希望这个解释有帮助。