我想使用 mongodb 数据库,但我注意到有两个不同的数据库,它们有自己的网站和安装方法:mongodb 和 mongoose。所以我问自己这个问题:“我用哪一个?”。
所以为了回答这个问题,我问社区你是否可以解释这两者之间的区别是什么?如果可能的话利弊?因为他们真的和我很相似。
我假设您已经知道 MongoDB 是一个 NoSQL 数据库系统,它以 BSON 文档的形式存储数据。但是,您的问题是关于 Node.js 的包。
就 Node.js 而言,mongodb 是用于与 mongodb 实例交互的本机驱动程序,而 mongoose 是用于 MongoDB 的对象建模工具。
mongoose
构建在 mongodb
驱动程序之上,为程序员提供了一种对其数据建模的方法。
编辑:我不想评论哪个更好,因为这会使这个答案固执己见。但是,我将列出使用这两种方法的一些优点和缺点。
使用 mongoose
,用户可以为特定集合中的文档定义架构。它为MongoDB中数据的创建和管理提供了很多便利。不利的一面是,学习 mongoose 可能需要一些时间,并且在处理非常复杂的模式方面有一些限制。
但是,如果您的集合架构不可预测,或者您希望在 Node.js 中获得类似 Mongo-shell 的体验,那么请继续使用 mongodb
驱动程序。这是最简单的拾取。这里的缺点是您必须编写大量代码来验证数据,并且出错的风险更高。
Mongo 是 NoSQL 数据库。
如果您不想对数据模型使用任何 ORM,那么您也可以使用本机驱动程序 mongo.js:https://github.com/mongodb/node-mongodb-native。
Mongoose 是 orm 之一,它为我们提供了通过易于理解的查询访问 mongo 数据的功能。
Mongoose 在您的数据库模型上扮演着抽象的角色。
我发现两者的另一个不同之处在于,使用 mongodb native driver
进行 connect to multiple databases
相当容易,而您必须使用 mongoose
中的变通方法,但仍有一些缺点。
因此,如果您想使用多租户应用程序,请使用 mongodb 本机驱动程序。
mongoose
本身就可以连接到多个数据库。无需解决方法stackoverflow.com/a/19475270/445600
Mongodb 和 Mongoose 是与 MongoDB 数据库交互的两个不同驱动程序。
Mongoose:对象数据建模 (ODM) 库,为您的数据提供严格的建模环境。用于与 MongoDB 交互,通过提供方便的数据管理使生活更轻松。
Mongodb:Node.js 中用于与 MongoDB 交互的本机驱动程序。
从第一个答案开始,
“使用 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" }
]
});
如果您打算将这些组件与您的专有代码一起使用,请参阅以下信息。
蒙古数据库:
这是一个数据库。该组件受 Affero 通用公共许可证 (AGPL) 许可证的约束。如果您将此组件与您的专有代码链接,那么您必须在公共域中发布您的整个源代码,因为它具有病毒效应,例如(GPL、LGPL 等)如果您在云上托管您的应用程序,则 (2)将适用,您还必须向最终用户发布您的安装信息。
猫鼬:
它是一个对象建模工具。该组件受 MIT 许可证管理。允许将此组件与专有代码一起使用,没有任何限制。允许使用任何媒体或主机发送您的应用程序。
mongo-db
对于新开发人员来说可能不是一个很好的选择。
另一方面,mongoose
作为 ORM(对象关系映射)对于新手来说可能是一个更好的选择。
Mongoose 是在 mongodb 驱动程序之上构建的,mongodb 驱动程序更底层。 Mongoose 提供了简单的抽象来轻松定义模式和查询。但在性能方面,Mongdb Driver 是最好的。
Mongodb 和 Mongoose 是两个完全不同的东西!
Mongodb 是数据库本身,而 Mongoose 是 Mongodb 的对象建模工具
编辑:正如指出的 MongoDB 是 npm 包,谢谢!
MongoDB 是官方的 MongoDB Node.js 驱动程序,允许 Node.js 应用程序连接到 MongoDB 并处理数据。另一方面,Mongoose 是在 mongoDB 之上构建的其他库。它更容易理解和使用。如果您是初学者,那么与猫鼬一起工作会更好。