22

我一直在一个新项目中使用它,但这也是我第一次使用 MongoDB。定义模式似乎没有必要,因为我认为 mongo 的好处是它不需要定义的方案。无论架构如何,我都不能即时保存对象吗?那我为什么要呢?此外缺少文档,使我可以在 mongo shell 中轻松完成的一些事情变得比它们应该做的更难。

4

4 回答 4

25

Mongoose for MongoDB 最好的一点是,您可以对正在插入/更新的数据进行内置的自动验证。Mongoose 还使您能够预先定义要发生的事件,例如,在保存文档之前。这是非常强大的,因为它整合了您必须编写的代码,并将该代码放置在它应该靠近文档逻辑而不是应用程序逻辑的位置。

查看中间件和验证以获取一些示例。Github 上的 alexyoung/Nodepad 在models.js 文件中有一些很好的示例。

于 2011-04-27T02:18:57.233 回答
8

事先了解定义的模式会很方便,因为这样您就可以做出否则可能无法做到的假设。

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

当然,即使在我定义明确的模型上,我也可以在其中拥有相当于无模式文档的内容,例如

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

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

于 2011-04-21T17:52:34.210 回答
3

你真的可以去任何一种方式。在许多其他语言中,MongoDB 有许多流行的映射器:Java 的 Morphia、PHP 的 Doctrine、Ruby 的 Mongoid / Mongomapper 等。

即使 MongoDB 是“无模式的”,它也不是“无模式的”。关于知道从数据库中得到什么,有话要说。

当然,构建一个临时对象并保存它也有一些优雅的地方。在这一点上,node.js 是非常新的,最好使用你喜欢的东西。

此外缺少文档,使我可以在 mongo shell 中轻松完成的一些事情变得比它们应该做的更难。

Mongoose 仍然是一个社区项目,而且相对较新。如果缺少文档或需要编写文档,我相信开发团队会喜欢帮助。您可能会在群组中与他们联系。

于 2011-04-21T22:25:19.177 回答
0

我用过 Mongoose,我不得不说我完全同意事先定义你的 Schema 会严重限制 MongoDB。Mongoose 背后的想法是使其安全并易于维护,但并不真正吸引基于文档的数据库。

于 2011-04-21T18:48:12.440 回答