“存储”一个Mongoose模式/模型(不是文档)以供将来使用

时间:2011-12-26 18:37:50

标签: javascript mongodb node.js mongoose jsonschema

问题:我正在制作一个允许开发人员“注册”他们的Mongoose模式的Web服务 - 他们将在浏览器中创建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中寻找像create table这样的东西。

2 个答案:

答案 0 :(得分:3)

  1. 您无法在Mongo中创建具有固定架构的集合。这显然是feature
  2. 只要您在尝试使用Mongoose之前注册了新的Schema,它就可以正常工作,无论该集合是否存在。
  3. Mongoose架构只是强制执行,你仍然可以通过下载到本机驱动程序来偷偷摸摸,这非常简单。 Whatever.collection.insert
  4. 您需要在每次启动服务器时重新注册架构

答案 1 :(得分:0)

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

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

相关问题