Mongoose:在一个集合下动态加载不同的模式
Posted
技术标签:
【中文标题】Mongoose:在一个集合下动态加载不同的模式【英文标题】:Mongoose : Dynamically load different schema under one collection 【发布时间】:2016-12-03 11:07:06 【问题描述】:我正在使用 nodejs 并且有一个注册页面,其中有一个选择标签可以在客户和员工之间进行选择。
我想要 1 个模型和 2 个架构: -用户:将包含公共道具,例如:邮件、姓名、密码... -EmployeeSchemma 与员工的特定文件 -ClientSchema 为客户端提供特定字段。
这就是我想在我的服务器端实现的目标:
var User=require("models/user");
router.post("/register",function(req,res)
var newUser=new User();
if(req.body.type=="client")
// make the newUser use the ClientSchema //
if(req.body.type=="employee")
// the newUser instance will use the EmployeeSchema //
);
请问我怎样才能达到这样的结果(?) 请注意,我只想使用一个模型,它可以根据表单中的用户选择对客户和员工用户进行建模。
【问题讨论】:
这可能有用:***.com/questions/14453864/… 谢谢你的回答,但这不是我要找的,我想要的是使用一个数据结构对象:类似这样的东西:var generic=require('/models/dynamicModel' );然后这个对象可以设置客户字段(如果它是客户)或员工字段(如果它是员工) 【参考方案1】:如果你想要一个“动态模型”,我想你正在寻找setting strict to false in mongoose
您知道,默认情况下,Mongoose 将遵循您设置的架构/模型,设置 strict: false 将允许您保存不在您的架构/模型中的字段。
因此,对于您的情况,在您的文件模型/用户中,您需要在创建架构时将“strict: false”作为第二个参数:
var userSchema = new Schema(
email: String,
name: String,
password: String
// other parts of your user schema
, strict: false)
您现在应该能够在同一个集合中相应地设置客户和员工字段。
【讨论】:
以上是关于Mongoose:在一个集合下动态加载不同的模式的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS Mongo - Mongoose - 动态集合名称