MongoDB和Mongoose之间的区别


157

我想使用mongodb数据库,但是我注意到有两个不同的数据库,它们都有自己的网站和安装方法:mongodb和mongoose。因此,我问自己一个问题:“我使用哪个?”。

因此,为了回答这个问题,我问社区是否可以解释这两者之间的区别?以及是否有利弊?因为它们看起来和我非常相似。


Answers:


233

我假设您已经知道MongoDB是一个NoSQL数据库系统,它以BSON文档的形式存储数据。但是,您的问题是有关Node.js的软件包的。

就Node.js而言,mongodb是用于与mongodb实例进行交互的本机驱动程序,而mongoose是 用于MongoDB 的对象建模工具

Mongoose建立在MongoDB驱动程序之上,为程序员提供了一种对其数据进行建模的方法。

编辑: 我不想评论哪个更好,因为这会使这个答案自以为是。但是,我将列出使用这两种方法的优点和缺点。

使用Mongoose,用户可以为特定集合中的文档定义架构。它在MongoDB中创建和管理数据提供了很多便利。不利的一面是,学习猫鼬可能会花费一些时间,并且在处理非常复杂的模式时会有一些限制。

但是,如果您的收集模式是不可预测的,或者您想在Node.js中体验类似Mongo-shell的体验,那么请继续使用MongoDB驱动程序。这是最简单的拿起。不利之处在于,您将必须编写大量代码来验证数据,并且出错的风险更高。


9
这是一个非常基于观点的问题。有些人可能更喜欢较低级别的API。您为什么不检查Mongoose和本机驱动程序,然后决定哪个对您更合适?
juunas 2015年

1
@ Michael9 Node.js的本机MongoDB驱动程序具有相同的名称。请注意单词“根据Node.js ...”。您的编辑不正确。
ZeMoon 2015年

@ZeMoon在这种情况下应该mongodb不是MongoDB:P
styvane 2015年

猫鼬以复数形式链接到集合名称是否有实际的区别?
安东尼·吉布斯

2
一个人也应该考虑性能因素,请参考这个URL,这个家伙分享了很棒的基准。medium.com/@bugwheels94/...
DHIRAJ KATEKAR


14

还有一个区别,我发现这两方面是,它是很容易connect to multiple databasesmongodb native driver,而你必须使用变通中mongoose仍然有一些缺点。

因此,如果您想使用多租户应用程序,请使用mongodb本机驱动程序。


6

如果您打算将这些组件与专有代码一起使用,请参考以下信息。

Mongodb:

  1. 这是一个数据库。
  2. 此组件受Affero通用公共许可证(AGPL)许可证约束。
  3. 如果将此组件与专有代码链接在一起,则必须在公共领域发布整个源代码,因为它具有病毒效应(例如GPL,LGPL等)
  4. 如果您是通过云托管应用程序,则(2)将适用,并且还必须将安装信息发布给最终用户。

猫鼬:

  1. 这是一个对象建模工具。
  2. 该组件由MIT许可证管理。
  3. 允许与专有代码一起使用此组件,没有任何限制。
  4. 允许使用任何媒体或主机运送您的应用程序。

1
只是以为我会提到。2018年10月16日之前的服务器组件是AGPL,但现在是一些自定义许可证。尽管驱动程序(mongodb)始终是Apache,并且对于专有代码无关紧要。参考:mongodb.com/community/licensing
DrHouse

2
MongoDB第4部分的答案不正确。通常,客户端应用程序使用Apache v2许可的MongoDB驱动程序(即MongoDB Node.JS驱动程序)。如果要修改MongoDB服务器代码本身(数据库)并重新分发,则您需要商业协议或将其开源。所述SSPL许可变更只是一个附加的数据库作为一种服务云厂商子句即暴露数据库功能类似的MongoDB阿特拉斯或AWS RDS等
万Bachtiar

6

mongo-db对于新开发者而言,这可能不是一个不错的选择。
另一方面mongoose,对于新手来说,ORM(对象关系映射)可能是更好的选择。


2
欢迎使用Stack Overflow!您的答案可能很有价值,但缺少一些解释。也许您仍然可以在答案中添加一些单词。这是一个给出良好答案的指南
大卫,

4

Mongodb和Mongoose是与MongoDB数据库进行交互的两种不同的驱动程序。

Mongoose:对象数据建模(ODM)库,为您的数据提供严格的建模环境。用于与MongoDB交互,它通过提供管理数据的便利性使生活变得更轻松。

Mongodb:Node.js中的本机驱动程序,用于与MongoDB进行交互。


3

Mongodb和Mongoose是完全不同的两件事!

Mongodb是数据库本身,而Mongoose是Mongodb 的对象建模工具

编辑:指出MongoDB是npm包,谢谢!


40
mongodb不是数据库,而是一个节点包,它是本机mongo驱动程序。它是用于从节点js访问mongo服务器的最低级别的API。
mariocatch 2015年

3
问题是关于用于数据库操作和猫鼬的Mongodb 本机驱动程序。答案不对。
sarora

@mariocatch MongoDB是一个文档数据库,具有所需的可伸缩性和灵活性,可用于所需的查询和索引编制。它写在其文档的主页上。
Deep Kakkar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.