【问题标题】:What is the killer reason for using Mongoose ORM?使用 Mongoose ORM 的杀手锏是什么?
【发布时间】:2011-08-10 12:10:18
【问题描述】:

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

【问题讨论】:

  • 在调用MongoDB无模式时,实际上是指数据库本身不需要模式,也不需要模式迁移。这并不意味着您的数据始终是非结构化的 - 在大多数情况下,您希望数据是结构化的,而且从本质上讲,通常是这样。
  • 肯定有需要迁移数据的情况。
  • @nbro - 编辑这个问题的价值为零,只是为了添加换行符,尤其是,因为 1)它已有 4 年历史,2)根据今天的 StackOverflow 指南,这个问题现在已经脱离了基于观点的话题。您甚至没有花时间编辑关于一个新项目和第一次使用 MongoDB 的序言(这完全是多余的)。
  • @DavidMakogon IMO,如果放置得当,换行符通常有助于使问题和答案更具可读性。它也可能有 10 年的历史,如果 IMO 我认为需要对其进行编辑以使其更具可读性,我会一直这样做,只要他们允许我这样做,而且我有时间去做。你应该感谢我而不是声称,但无论如何,人们是如此忘恩负义。

标签: node.js mongodb mongoose nosql


【解决方案1】:

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

查看middleware 并验证一些示例。 Github 上的 alexyoung/Nodepad 在models.js file 中有一些很好的例子。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      还缺少文档,这让我可以在 mongo shell 中轻松完成的一些事情变得更加困难。

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我在 mongoose 发布前检查了它,这篇文章和 op 的文章指出的是 - 你从来没有真正读过文档。 Mongoose 一直有字段的混合模式类型,它允许您想要保存的任何和所有数据可用。事实上,如果您愿意 - 您可以让您的收藏以这样的方式表现,但它确实严重阻碍了您的应用程序。如果你需要一直检查数据是否存在,你实际上并没有任何结构,这会导致错误、问题和数据不一致。
        猜你喜欢
        • 2011-07-21
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        相关资源
        最近更新 更多