我正在使用express和mongoose开发一个特殊的应用程序,需要构建一个mongoose模式,然后将其存储在数据库中。我想创建一个项目,人们可以在运行时动态创建集合,然后让其他人通过特殊表单填写这些集合。
例如,我想将下面的模式存储到我的数据库中。我怎么能这样做?
var entitySchema = {
name : String,
num : [Number],
time : [Date]
} ;
是否有将mongoose模式转换为json或string的特殊函数?
在架构json上调用 toString()函数不起作用,因为它无法解释字符串或数字类型
答案 0 :(得分:1)
Mongoose模式使用Date
之类的函数属性和Schema.Types.Mixed
等自己的类型来定义模式,MongoDB不知道如何存储这些东西,所以你必须做一些额外的序列化/反序列化工作使这项工作。例如,在保存模式时将函数转换为字符串,例如Date - >“Date”,并在将模式读回mongoose时再次恢复正确的Date函数。您需要通过模式结构进行递归,以查找有问题的属性并进行此类修改。这是可行的,但如果您不需要mongoose提供的额外功能(如索引生成,前/后中间件等),还有其他可能更好的选择。
您可以考虑使用JSON schemas代替。一个受欢迎的库是tv4。
JSON模式可以存储在mongoDB中而无需更改,您可以在客户端和服务器上使用相同的模式库。 JSON模式解析引擎还为您提供了更多关于验证的选项,例如更好的错误消息。