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:在一个集合下动态加载不同的模式的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongoose 动态创建集合

NodeJS Mongo - Mongoose - 动态集合名称

Mongoose:如何向模式添加动态索引?

Mongoose 模式和集合

MongoDB/Mongoose:对同一集合中不同类型的文档使用不同的方案

如何基于作为参数传递的动态模式的猫鼬模型?