我一直在使用新项目,但这也是我第一次使用MongoDB。定义模式似乎是不必要的,因为我认为mongo的优点在于它不需要定义的方案。我不能只是在架构中保存对象吗?那我为什么要这样?还缺少文档,使得我可以轻松地在mongo shell中做一些比他们应该更难的事情。
答案 0 :(得分:19)
关于MongoDB的Mongoose最好的事情是,您可以对要插入/更新的数据进行内置自动验证。 Mongoose还允许您在文档保存之前预先定义要发生的事件。这非常强大,因为它整合了您必须编写的代码,并将代码放在文档逻辑旁边而不是应用程序逻辑中。
查看middleware并验证一些示例。 Github上的alexyoung / Nodepad在models.js file中有一些很好的例子。
答案 1 :(得分:6)
事先知道定义的模式可能很方便,因为那样你就可以做出你本来可能无法做出的假设。
例如,如果我有Post
架构,那么我可以假设它有body
字段并将其用作String
而不检查其存在。
当然,即使在我定义良好的模型上,我也可以在其中拥有相当于无模式的文档,例如。
mongoose.model('Post', new Schema({
body: String,
meta: {}
}));
然后我可以随心所欲地将随机数据添加到myPost.meta。它为我定义了模式和无模式之间的平衡。
答案 2 :(得分:3)
你真的可以选择任何一种方式。在许多其他语言中有许多流行的MongoDB映射器:Morphia for Java,Doctrine for PHP,Mongoid / Mongomapper for Ruby等。
即使MongoDB是“无架构”,它也不是“无架构”的。关于知道从数据库中得到什么可以说些什么。
当然,建立一个ad-hoc对象并保存它也有一些优雅。在这一点上,node.js是非常新的,它可能最适合你喜欢的东西。
还缺少文档,使得我可以轻松地在mongo shell中做一些事情,然后他们应该这样做。
Mongoose仍然是一个社区项目,它相对较新。如果有文档丢失或需要编写,我相信开发团队会喜欢这些帮助。您可以与他们联系on the groups。
答案 3 :(得分:0)
我使用过Mongoose,我不得不说我完全同意事先定义你的Schema会严重限制MongoDB。 Mongoose背后的想法是使其安全并且易于维护,但并不真正吸引基于文档的数据库。