MongoDB和Mongoose的区别

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

所以为了回答这个问题,我问社区是否可以解释这两者之间的区别?如果可能的话,有利有弊?因为在我看来他们真的很像。

161509 次浏览

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

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

编辑:如上所述,MongoDB是npm包,谢谢!

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

在Node.js中,mongodb是用于与mongodb实例交互的本机驱动程序,而猫鼬是用于mongodb的对象建模工具

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

<强>编辑: 我不想评论哪个更好,因为这会让我的回答显得固执己见。然而,我将列出使用这两种方法的一些优点和缺点

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

然而,如果你的集合模式是不可预测的,或者你想在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原生驱动。

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

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

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

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

Mongodb:

  1. 它是一个数据库。
  2. 该组件由Affero通用公共许可证(AGPL)许可证管理。
  3. 如果你将这个组件与你的专有代码一起链接,那么你必须在公共领域发布你的整个源代码,因为它的病毒效应,如(GPL, LGPL等)
  4. 如果你在云上托管你的应用程序,(2)将适用,而且你必须向最终用户发布你的安装信息。

猫鼬:

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

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

Mongoose是在mongodb驱动的基础上构建的,mongodb驱动的层次比较低。Mongoose提供了简单的抽象来轻松定义模式和查询。但是在性能方面,Mongdb Driver是最好的。

从第一个答案来看,

使用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" }
]
});
MongoDB是官方的MongoDB Node.js驱动程序,允许Node.js应用程序连接到MongoDB并处理数据。 另一方面,Mongoose是建立在mongoDB之上的其他库。它更容易理解和使用。如果你是初学者,猫鼬对你来说更好