如何在不定义模式的情况下使用Mongoose?

在之前版本的Mongoose(对于node.js)中,有一个选项可以在不定义模式的情况下使用它

var collection = mongoose.noSchema(db, "User"); 

但在目前的版本中,“noSchema”function已被删除。 我的模式可能经常改变,真的不适合定义的模式,所以有没有一种新的方法在mongoose中使用无模式模型?

我想这是你在寻找mongoose的地方

选项:严格

严格选项(默认情况下启用)确保添加到我们的模型实例中的值在我们的模式中没有指定,不会保存到数据库中。

注意:除非您有充分的理由,否则不要设置为false。

  var thingSchema = new Schema({..}, { strict: false }); var Thing = mongoose.model('Thing', thingSchema); var thing = new Thing({ iAmNotInTheSchema: true }); thing.save() // iAmNotInTheSchema is now saved to the db!! 

其实“混合”( Schema.Types.Mixed )模式似乎做到了这一点在Mongoose中…

它接受一个无模式自由forms的JS对象 – 所以无论你可以扔在它。 看来你必须在手动之后手动触发保存,但似乎是一个公平的权衡。

SchemaType是“一切皆有可能”,它的灵活性来自于难以维护的折衷。 混合可以通过Schema.Types.Mixed或通过传递一个空的对象文字来获得。 以下是等同的:

 var Any = new Schema({ any: {} }); var Any = new Schema({ any: Schema.Types.Mixed }); 

由于它是一个无模式types,您可以将其值更改为其他任何您喜欢的值,但Mongoose失去了自动检测和保存这些更改的function。 为了“告诉”Mongoose混合types的值已经改变,调用文档的.markModified(path)方法,将path传递给你刚才改变的混合types。

 person.anything = { x: [3, 4, { y: "changed" }] }; person.markModified('anything'); person.save(); // anything will now get saved 
  • mongoose模式types

嘿Chris,看看Mongous 。 我和mongoose有同样的问题,因为我的模式现在正在发展中变得非常频繁。 蒙古允许我有简单的mongoose,同时能够松散地定义和改变我的“模式”。 我select简单地构build标准的JavaScript对象,并像这样将它们存储在数据库中

 function User(user){ this.name = user.name , this.age = user.age } app.post('save/user', function(req,res,next){ var u = new User(req.body) db('mydb.users').save(u) res.send(200) // that's it! You've saved a user }); 

比Mongoose简单得多,尽pipe我相信你错过了一些很酷的中间件,比如“pre”。 我不需要这些。 希望这可以帮助!!!

它不可能了。

您可以将Mongoose与具有模式的集合一起使用,也可以将这些模式的节点驱动程序或其他mongo模块用于Mongoose。

https://groups.google.com/forum/#!msg/mongoose-orm/Bj9KTjI0NAQ/qSojYmoDwDYJ