【问题标题】:'Storing' a Mongoose Schema/Model (not the document) for future use“存储”一个 Mongoose 模式/模型(不是文档)以供将来使用
【发布时间】:2012-01-28 02:58:28
【问题描述】:

问题:我正在制作一个 Web 服务,允许开发人员“注册”他们的 Mongoose 模式 - 他们将在浏览器中创建 JSON 模式,然后将其 AJAX 传输到我的服务器.

所以我将使用提交的架构创建一个新的 Mongoose 模型,但现在我需要此架构存在,即使我重新启动服务器。

我有类似这样的代码:

/* schemaObj is what you create a schema with,
   for example { name: String, id: Number } */

registerSchema = function(model_name, schemaObj) {
    desiredSchema = new Schema(schemaObj);
    desiredCollection = 'collection_' + model_name;
    mongoose.model(desiredCollection, desiredSchema, desiredCollection);
}

好的,这样就为我们创建了一个带有自定义架构的模型。

现在我的问题是,在我运行此代码,创建模型,然后重新启动服务器后,新的集合/模型将不存在 - 因为显然只有在保存文档时才会创建集合 - 而我没有'现在不想保存文档(因为我没有),只需创建一个集合。

问题:有没有办法使用这种“固定”模式创建一个集合 - 以便将来插入的文档应该严格符合该模式?我基本上是在 SQL 中寻找类似 @​​987654322@ 的东西。

【问题讨论】:

    标签: javascript mongodb node.js mongoose jsonschema


    【解决方案1】:
    1. 您无法在 Mongo 中创建具有固定架构的集合。这显然是 feature
    2. 只要您在尝试使用之前已向 Mongoose 注册了新架构,它就应该可以正常工作,无论该集合是否存在。
    3. 无论如何,Mongoose 模式只是强制执行的,您仍然可以通过下拉到本机驱动程序来偷偷摸摸,这真的很容易。 Whatever.collection.insert
    4. 每次启动服务器时都需要重新注册架构

    【讨论】:

    • 4 是我想确认的,谢谢。所以我需要将注册的模式存储在他们自己的数据库中,我想我应该有一个单独的字符串化模式集合+它们的集合名称;并重新加载它们。
    • 没错!即使您的模式不是动态的,您也需要这样做。最好的!
    【解决方案2】:

    我也在开发像您这样的应用程序,用户可以在其中创建他们的模式,然后在 Mongoose 中自动加载这些模式。我创建了一个函数,在您使用之前检查是否在 Songoose 中加载了架构,如果没有加载(例如在应用程序重新启动后),它会加载它。

    我还没有文档,但是你可以在这个jslModel.js 文件中找到我的实现。 搜索function loadMongooseModel

    【讨论】:

      猜你喜欢
      • 2020-05-15
      • 2016-01-08
      • 2016-01-06
      • 2013-01-09
      • 1970-01-01
      • 2018-08-25
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多