使用Mongoose ORM的凶手是什么原因?

我一直在使用一个新的项目,但这也是我第一次使用MongoDB。 定义一个模式似乎没有必要,因为我认为mongo的优势在于它不需要定义的scheme。 我不能仅仅保存对象,不pipe架构如何? 那为什么我要? 另外文件是缺乏的,使我可以很容易地在蒙戈壳做的事情,那么他们应该是。

关于Mongoose for MongoDB的最好的事情是,你可以内置自动validation你正在插入/更新的数据。 mongoose还可以让你预先定义事件的发生,比如说,在文档被保存之前。 这是非常强大的,因为它整合了您必须编写的代码,并将代码放置在文档逻辑旁边,而不是应用程序逻辑中。

查看中间件和一些示例的validation。 在Github上的alexyoung / Nodepad在models.js文件中有一些很好的例子。

事先了解一个已定义的模式可能会很方便,因为那样你可以做出假设,否则你可能无法做到。

例如,如果我有一个Post模式,那么我可以假设它有一个body字段,并将其用作String而不检查其存在。

即使在我定义良好的模型中,我也可以拥有相当于一个无模式的文档,例如

 mongoose.model('Post', new Schema({ body: String, meta: {} })); 

然后我可以很简单地随机添加随机数据到myPost.meta。 它在定义的模式和无模式之间为我提供了非常好的平衡。

你可以真的去任何方式。 在很多其他语言中,MongoDB有很多stream行的映射器:Morphia for Java,PHP学说,Mongoid / Mongomapper for Ruby等等。

即使MongoDB是“无模式”,它也不是“无模式”的。 知道从数据库中得到什么期望有一些东西需要说明。

当然,构build临时对象并保存它也有一些优雅之处。 在这一点上,node.js是非常新的,它可能是最好的与你喜欢的东西。

另外文件是缺乏的,使我可以很容易地在蒙戈壳做的事情,那么他们应该是。

mongoose仍然是一个社区项目,这是相对较新的。 如果有文档丢失或需要写入,我相信开发团队会喜欢这个帮助。 你可能会在组上与他们联系。

我已经使用了Mongoose,我不得不说,我完全同意,事先定义Schema会严重限制MongoDB。 Mongoose背后的想法是使其安全,并允许容易维护,但并不真正呼吁基于文档的数据库。