如何在不定义模式的情况下使用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