【问题标题】:Store mongoose schema in database将猫鼬模式存储在数据库中
【发布时间】:2019-08-30 02:28:59
【问题描述】:

我对 Mongoose 和 Nodejs 还是很陌生。

我想允许用户在我的应用程序中定义 Mongoose Schema,并将它们保存在数据库中。稍后他们也可以按照该模式创建文档。类似于 Headless CMS。

我已经能够通过 API 请求创建架构 - 但我将如何保存架构以供以后使用。我可以将 Mongoose Schema 存储在数据库中吗?

所有架构都是空的,所以我需要的只是唯一的名称

    app.get(/create/:schemaName, (req, res) => {

      let Schema = mongoose.Schema;
      let myNewSchema = new Schema({
            schemaName: {
               type: 'String',
               default: ''
            },
            attributes: {
               type: Object,
               blackbox: true
            }
       });

       let model = mongoose.model(schemaName, myNewSchema)

       functionThatAddRoutesToModel(model)

    })

创建 Schema 后,我向该模型添加了一些 API 路由

   function functionThatAddRoutesToModel(model){

     app.get(/exampleSchemaName/create, (req, res) => {
      // model.findOne etc etc
     })

     ...
   }

这一切正常,但如果我关闭节点服务器,我会丢失所有架构并且所有功能都会消失。

是否可以将所有架构存储为数据库或 JSON 格式,然后在我启动服务器时创建所有架构?

我还想强调一下,我对此很陌生 - 因此,如果您有其他解决方案来创建类似应用程序的无头 cms - 我会全力以赴。

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    与其让用户创建架构,不如创建一个没有属性的架构mongoose.Schema({}, { strict: false }),让用户使用他们想要的字段存储文档。

    strict 选项(默认启用)确保传递给模型构造函数但未在我们的架构中指定的值不会保存到数据库中。

    因此,当您将其设置为 false 时,这允许您向文档添加属性。
    示例

    const userSchema = new mongoose.Schema({}, {strict: false});
    const User = mongoose.model('User', userSchema);
    
    let user = new User({ name: 'foo'});
    user.save(); // _id: 5cabbdfc82f0532f2e66a962, name:"foo", __v:0
    
    let user2 = new User({ age: 15});
    user2.save(); // id: 5cabbdfc82f0532f2e66a963, age:15, __v:0
    

    【讨论】:

    • 感谢您的回复!这是我错过的东西,肯定会添加这个。然后还可以将模式存储为 JSON 格式作为备份
    猜你喜欢
    • 2015-07-29
    • 2016-08-22
    • 2017-11-28
    • 1970-01-01
    • 2016-11-18
    • 2017-06-12
    • 2020-01-26
    • 2017-05-08
    • 2016-08-05
    相关资源
    最近更新 更多