ChatGPT解决这个技术问题 Extra ChatGPT

MongoDB 和 Mongoose 的区别

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

所以为了回答这个问题,我问社区你是否可以解释这两者之间的区别是什么?如果可能的话利弊?因为他们真的和我很相似。


Z
ZeMoon

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

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

mongoose 构建在 mongodb 驱动程序之上,为程序员提供了一种对其数据建模的方法。

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

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

但是,如果您的集合架构不可预测,或者您希望在 Node.js 中获得类似 Mongo-shell 的体验,那么请继续使用 mongodb 驱动程序。这是最简单的拾取。这里的缺点是您必须编写大量代码来验证数据,并且出错的风险更高。


这是一个相当基于意见的问题。有些人可能更喜欢较低级别的 API。为什么不检查 Mongoose 和本机驱动程序,然后确定哪个更适合您?
@Michael9 Node.js 的本机 MongoDB 驱动程序具有相同的名称。请注意“就 Node.js 而言……”这句话。您的编辑不正确。
还应该考虑性能因素,请参考这个网址,这个人分享了很棒的基准。medium.com/@bugwheels94/…
如果我用 npm 安装 mongoose,是否也安装了 mongodb,因为它是一个 mongo 基础包?我在 package.json 中看不到这种行为,但可能在幕后安装了 mongodb?等等,这是answer
@Timo 正确,mongodb 是 mongoose 的依赖项,因此也将安装它。但是,如果您只是使用 mongoose 作为项目的直接依赖项,那么 mongodb 将不会出现在 package.json 中。但是,您应该能够在 node_modules 中看到它。
N
Nemo

Mongo 是 NoSQL 数据库。

如果您不想对数据模型使用任何 ORM,那么您也可以使用本机驱动程序 mongo.js:https://github.com/mongodb/node-mongodb-native

Mongoose 是 orm 之一,它为我们提供了通过易于理解的查询访问 mongo 数据的功能。

Mongoose 在您的数据库模型上扮演着抽象的角色。


@ArslanRamay:medium.com/@bugwheels94/…,很有帮助
这最初是为旧的 Mongoose 版本运行的,也不是作为 .lean() 运行的,而是作为整个对象返回的,不是很全面
Mongoose 是 ODM(对象文档映射器)而不是 ORM(对象关系映射器)。
R
Rahul

我发现两者的另一个不同之处在于,使用 mongodb native driver 进行 connect to multiple databases 相当容易,而您必须使用 mongoose 中的变通方法,但仍有一些缺点。

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


看起来 mongoose 本身就可以连接到多个数据库。无需解决方法stackoverflow.com/a/19475270/445600
d
dhaker

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

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

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


F
Forrest Wei

从第一个答案开始,

“使用 Mongoose,用户可以为特定集合中的文档定义模式。它为 MongoDB 中数据的创建和管理提供了很多便利。”

您现在还可以使用 mongoDB 本机驱动程序定义模式

##新收藏

db.createCollection("recipes",
    validator: { $jsonSchema: {
         <<Validation Rules>>
        }
    }
)

##对于现有的集合

db.runCommand({
    collMod: "recipes",
    validator: { $jsonSchema: {
         <<Validation Rules>>
        }
    }
})
    

##完整示例

db.createCollection("recipes", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name", "servings", "ingredients"],
      additionalProperties: false,
      properties: {
        _id: {},
        name: {
          bsonType: "string",
          description: "'name' is required and is a string"
        },
        servings: {
          bsonType: ["int", "double"],
          minimum: 0,
          description:
            "'servings' is required and must be an integer with a minimum of zero."
        },
        cooking_method: {
          enum: [
            "broil",
            "grill",
            "roast",
            "bake",
            "saute",
            "pan-fry",
            "deep-fry",
            "poach",
            "simmer",
            "boil",
            "steam",
            "braise",
            "stew"
          ],
          description:
            "'cooking_method' is optional but, if used, must be one of the listed options."
        },
        ingredients: {
          bsonType: ["array"],
          minItems: 1,
          maxItems: 50,
          items: {
            bsonType: ["object"],
            required: ["quantity", "measure", "ingredient"],
            additionalProperties: false,
            description: "'ingredients' must contain the stated fields.",
            properties: {
              quantity: {
                bsonType: ["int", "double", "decimal"],
                description:
                  "'quantity' is required and is of double or decimal type"
              },
              measure: {
                enum: ["tsp", "Tbsp", "cup", "ounce", "pound", "each"],
                description:
                  "'measure' is required and can only be one of the given enum values"
              },
              ingredient: {
                bsonType: "string",
                description: "'ingredient' is required and is a string"
              },
              format: {
                bsonType: "string",
                description:
                  "'format' is an optional field of type string, e.g. chopped or diced"
              }
            }
          }
        }
      }
    }
  }
});

插入集合示例

db.recipes.insertOne({
  name: "Chocolate Sponge Cake Filling",
  servings: 4,
  ingredients: [
    {
      quantity: 7,
      measure: "ounce",
      ingredient: "bittersweet chocolate",
      format: "chopped"
    },
    { quantity: 2, measure: "cup", ingredient: "heavy cream" }
  ]
});

A
ANK

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

蒙古数据库:

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

猫鼬:

它是一个对象建模工具。该组件受 MIT 许可证管理。允许将此组件与专有代码一起使用,没有任何限制。允许使用任何媒体或主机发送您的应用程序。


只是想我会提到。 2018 年 10 月 16 日之前的服务器组件是 AGPL,但现在是一些自定义许可证。尽管驱动程序(mongodb)始终是 Apache 并且与专有代码无关。参考:mongodb.com/community/licensing
MongoDB 第 4 部分的答案不正确。通常客户端应用程序使用 Apache v2 许可的 MongoDB 驱动程序(即 MongoDB Node.JS 驱动程序)。如果您正在修改 MongoDB 服务器代码本身(数据库)并重新分发它,那么您要么需要商业协议,要么将其开源。 SSPL 许可证更改只是对数据库即服务云供应商条款的补充,即公开类似于 MongoDB Atlas 或 AWS RDS 等的数据库功能。
这不是真的。 MongoDB 数据库本身与 mongo 驱动程序不同。
答案传播 FUD。它被错误地指责 AGPL 和 LGPL 具有病毒性质,并声称使用 mongodb 驱动程序的应用程序必须在 GPL 许可下发布。 Mongoose 使用 mongodb 驱动程序并使用 MIT。所以答案的第一部分是谎言。
D
David

mongo-db 对于新开发人员来说可能不是一个很好的选择。
另一方面,mongoose 作为 ORM(对象关系映射)对于新手来说可能是一个更好的选择。


欢迎来到堆栈溢出!您的回答可能很有价值,但缺少一些解释。也许您仍然可以在答案中添加一些词。 Here is a guide to give good answers
不是真的;许多人会发现只使用本机驱动程序方法来访问和操作数据比担心模式和所有其他猫鼬的东西要容易得多。
A
Abdulhafeez Abdulraheem

Mongoose 是在 mongodb 驱动程序之上构建的,mongodb 驱动程序更底层。 Mongoose 提供了简单的抽象来轻松定义模式和查询。但在性能方面,Mongdb Driver 是最好的。


S
Secret

Mongodb 和 Mongoose 是两个完全不同的东西!

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

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


mongodb 不是数据库,它是一个节点包,它是本机 mongo 驱动程序。它是从节点 js 访问 mongo 服务器的最低级别的 API。
问题是关于用于数据库操作的 Mongodb 本机驱动程序与 mongoose。答案不是重点。
@mariocatch MongoDB 是一个文档数据库,具有您所需的查询和索引所需的可扩展性和灵活性。它写在其文档的主页上。
Y
Yeshwin Verma The Programmer

MongoDB 是官方的 MongoDB Node.js 驱动程序,允许 Node.js 应用程序连接到 MongoDB 并处理数据。另一方面,Mongoose 是在 mongoDB 之上构建的其他库。它更容易理解和使用。如果您是初学者,那么与猫鼬一起工作会更好。