2011-12-26 48 views
3

问题:我正在开发一个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中的create table

回答

3
  1. 您不能在Mongo中创建具有固定模式的集合。这明确是feature
  2. 只要您在尝试使用Mongoose之前注册了新的Schema,它应该可以正常工作,不管该集合是否存在。
  3. 无论如何,Mongoose模式只是被强制执行,你仍然可以通过拖放到本地驱动程序来偷偷摸摸,这很容易。 Whatever.collection.insert
  4. 您需要重新注册模式在启动服务器时都
+0

** 4 **是我想确认,谢谢。所以我需要将注册模式存储在自己的数据库中,我想我应该有一个单独的字符串模式集合+它们的集合名称;并重新加载它们重新开始。 – 2011-12-26 18:57:54

+0

是的!即使您的模式不是动态的,您也需要这样做。最好! – 2011-12-26 19:32:40

0

我也在努力像你这样的,在这里用户可以创建自己的模式,然后再自动加载应用程序猫鼬。我创建了一个函数,用于在使用之前检查一个模式是否在Songoose中加载,如果它未加载(例如在应用程序重新启动之后),则加载它。

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