【问题标题】:How do I store a mongoose schema in the database如何在数据库中存储猫鼬模式
【发布时间】:2015-07-29 07:18:47
【问题描述】:

我正在使用 express 和 mongoose 开发一个特殊的应用程序,它需要构建一个 mongoose 模式,然后将其存储在数据库中。我想创建一个项目,人们可以在运行时动态创建集合,然后要求其他人通过特殊表格填写这些集合

例如,我想将如下所示的模式存储到我的数据库中。我该怎么做?

var entitySchema = {
    name : String,
    num : [Number],
    time : [Date]
} ;

有没有什么特殊的函数可以将猫鼬模式转换为 json 或字符串?
在模式 json 上调用 toString() 函数,不起作用,因为它无法解释 StringNumber 类型

【问题讨论】:

  • 嗯,什么?您想将 Schema in 存储在数据库中吗?好吧,它只是一个对象,所以这不应该是一个问题,但你到底为什么需要,这似乎是一个可怕的想法?
  • 我想创建一个项目,人们可以在运行时动态创建集合,然后要求其他人通过特殊表格填充这些集合,这就是为什么我需要将模式存储在 DB 中
  • 您始终可以使用{name : "", num: 1} 等存储架构,并在获取构造函数后在循环中调用.constructor 以获取构造函数,然后再将其传递给Mongo。没试过,但应该可以。然而这都是错误的,模式不应该是动态的,你不应该让用户定义模式。
  • @Salar - 你能启动并运行它吗?

标签: javascript node.js mongodb express mongoose


【解决方案1】:

Mongoose 模式使用像 Date 这样的函数属性和它自己的类型(如 Schema.Types.Mixed)来定义模式,而 MongoDB 不知道如何存储这些东西,所以你必须做一些额外的序列化/反序列化工作使这项工作。例如,在保存模式时将函数转换为字符串,例如 Date-->“Date”,并在将模式读回 mongoose 时再次恢复正确的 Date 函数。您需要通过您的模式结构进行递归以查找有问题的属性并进行此类修改。这是可行的,但如果您不需要 mongoose 提供的额外功能(如索引生成、前置/后置中间件等),还有其他更好的选择。

您可以考虑改用JSON schemas。一个流行的库是tv4

JSON 模式无需更改即可存储在 mongoDB 中,您可以在客户端和服务器上使用相同的模式库。 JSON 模式解析引擎还为您提供了更多关于验证的选项,例如更好的错误消息。

【讨论】:

    猜你喜欢
    • 2019-08-30
    • 2017-11-28
    • 2016-08-22
    • 1970-01-01
    • 2021-08-11
    • 2016-11-18
    • 1970-01-01
    • 2015-10-14
    • 2018-05-21
    相关资源
    最近更新 更多