更多技术信息请关注公众号:CTO Plus,获取更多。
原文:Node.js数据库开发之Mongodb 与 Mongoose 的使用和详细介绍
在 Node.js 中,Mongodb是一种常用的 NoSQL 数据库,而 Mongoose 则是一个 Node.js 的 ORM 框架,可以帮助开发者更方便地操作 Mongodb 数据库。在本文中,我们将介绍如何使用 Mongodb 和 Mongoose 来开发 Node.js 应用程序。
关于Node.js其他的数据库(HBase、Redis、MySQL、PostgreSQL、Elasticsearch)开发,请关注公众号CTO Plus后续的发文。
其中,hbase和 redis 和 mongodb 和 couchdb 虽然都属于 nosql。但它们关注的领域不一样。hbase是存海量数据,redis用来做缓存,而 mongodb 和 couchdb 则试图取代一些使用 mysql 的场景。
关系型数据库和非关系型数据的特点
关系型数据库和非关系型数据库是两种不同的数据库类型,它们具有不同的特点和适用场景。
关系型数据库的特点
- 数据以表格的形式存储,具有固定的结构和预定义的模式。
- 数据之间通过主键和外键建立关联。
- 支持事务处理,具有 ACID(原子性、一致性、隔离性和持久性)特性。
- 支持强大的查询语言(如SQL),可以进行复杂的查询和数据分析。
- 适用于结构化数据和需要保证数据一致性的应用场景,如金融系统、电子商务等。
非关系型数据库的特点
- 数据以非结构化或半结构化的形式存储,没有固定的模式或预定义的表结构。
- 数据之间可以是键值对、文档、列族等形式,具有更灵活的数据模型。
- 不支持事务处理,通常具有较高的可扩展性和性能。
- 适用于大数据、实时数据和需要高度可扩展性的应用场景,如社交媒体、物联网等。
关系型数据库和非关系型数据库具有不同的特点和适用场景。关系型数据库适用于结构化数据和需要保证数据一致性的应用场景,非关系型数据库适用于非结构化或半结构化的数据、大数据和实时数据的应用场景。MongoDB是一种非关系型的文档型数据库,具有灵活的数据模型、高性能和可扩展性,以及丰富的查询功能,适用于各种类型的应用开发。
MongoDB特点
MongoDB是一种非关系型数据库,属于文档型数据库的一种。它具有以下特点:
- 数据以文档的形式存储,使用 BSON(二进制JSON)格式表示。
- 文档是一个键值对的集合,可以嵌套和包含不同类型的值。
- 支持动态模式,文档之间的结构可以灵活地变化。
- 支持复杂的查询和索引,具有高性能和可扩展性。
- 提供了丰富的功能和工具,如复制、分片、自动故障转移等。
文档型数据库是一种非关系型数据库,它以文档的形式存储数据。文档是一个自包含的数据单元,可以包含多个键值对,类似于关系型数据库中的一行记录。文档型数据库的优势和特点包括:
- 灵活的数据模型:文档型数据库不需要预定义的表结构,可以根据需求灵活地定义和修改文档的结构,适应数据的变化。
- 高性能和可扩展性:文档型数据库通常具有高性能和可扩展性,能够处理大量的数据和并发请求。
- 丰富的查询功能:文档型数据库支持复杂的查询,可以使用索引和聚合操作进行数据分析和处理。
- 易于开发和维护:文档型数据库使用通用的JSON格式表示数据,易于开发和维护,与现代应用开发的需求更加契合。
关系型数据库的数据层级与mongodb的层级对应关系
数据库(db) | 表(table) | 记录(record) | 字段(field) |
---|---|---|---|
数据库 | 集合(collection) | 文档(document) | 字段(field) |
关于更多的数据库(关系型和非关系型)以及MongoDB的高级特性将在公众号CTO Plus后续的发文章中,敬请关注。
MongoDB是一种文档型数据库,它使用BSON(Binary JSON)格式来表示和存储数据。BSON是一种二进制的JSON扩展格式,它在JSON的基础上添加了一些额外的数据类型和功能。
文档型数据库是一种非关系型数据库,它以文档的形式存储数据。文档是一个自包含的数据单元,类似于关系型数据库中的一行记录。在MongoDB中,文档是以BSON格式表示和存储在集合中的。推荐在同一个 collection 中使用固定的数据形式。
BSON和JSON是两种不同的数据格式,它们之间有一些相似之处,但也有一些不同之处。
相似之处:
-
BSON和JSON都是用于表示和传输数据的格式。
-
BSON和JSON都支持键值对的形式。
-
BSON和JSON都支持基本的数据类型,如字符串、数字、布尔值等。
不同之处:
-
BSON是二进制格式,而JSON是文本格式。
-
BSON相对于JSON支持更多的数据类型,如日期、正则表达式、二进制数据等。
-
BSON相对于JSON在存储和传输效率上更高,因为它是二进制格式,可以更紧凑地表示数据。
BSON格式的数据可以直接在MongoDB中进行查询和操作,而不需要进行转换。同时,MongoDB还提供了一些特殊的操作和索引,用于优化BSON格式的数据的查询和访问。将在后面的数据库系列的文章中详细介绍,请关注公众号CTO Plus后续发文
Mongoose介绍
Mongoose是一个基于Node.js的对象文档映射(Object Document Mapping,ODM)工具,用于在应用程序中与MongoDB数据库进行交互。ODM是一种将对象和文档数据库(如MongoDB)之间的数据进行映射的技术。它允许开发者使用面向对象的方式来操作数据库,而不需要直接编写原生的数据库查询语句。它提供了一种简单而优雅的方式来定义和操作MongoDB的模式(Schema),并提供了一些额外的功能来简化数据库操作。
ODM和ORM(对象关系映射)是类似的概念,它们都是用于将对象和数据库之间进行映射的技术。不同之处在于,ORM是用于关系型数据库(如MySQL、PostgreSQL)的,而ODM是用于文档数据库(如MongoDB)的。
ODM和ORM的共同目标是简化开发者与数据库之间的交互,提供一种更高级别的抽象来操作数据库。它们都提供了一些常见的功能,如定义模型、查询构建、数据验证、关联等。
然而,由于文档数据库和关系型数据库之间的差异,ODM和ORM在实现细节上有一些不同。ODM通常更加灵活,因为文档数据库不需要遵循严格的表结构,可以容纳各种类型的数据。而ORM在处理关系型数据库时,需要遵循表结构和关系的规范。
以下是Mongoose的一些特性和作用:
-
定义模式(Schema):Mongoose允许您定义数据模型的结构,包括字段的类型、验证规则、默认值等。这使得在应用程序中使用一致的数据结构变得更加容易。
-
数据验证:Mongoose提供了一套强大的验证机制,可以在保存数据之前对数据进行验证。这可以确保数据的完整性和一致性,防止无效或不合法的数据进入数据库。
-
中间件支持:Mongoose支持在保存、更新、查询等操作前后执行中间件函数。这使得您可以在数据操作之前或之后执行一些额外的逻辑,例如加密密码、更新时间戳等。
-
查询构建器:Mongoose提供了灵活且易于使用的查询构建器,可以轻松地构建复杂的查询条件。您可以使用链式调用的方式来定义查询条件、排序、分页等操作。
-
引用和关联:Mongoose支持引用和关联不同集合之间的数据。这使得在不同集合之间建立关系和查询数据变得更加方便。
-
中间件支持:Mongoose支持在保存、更新、查询等操作前后执行中间件函数。这使得您可以在数据操作之前或之后执行一些额外的逻辑,例如加密密码、更新时间戳等。
-
数据库连接管理:Mongoose提供了一个简单的接口来管理与MongoDB数据库的连接,包括连接、断开连接和重新连接等操作。
安装 Mongodb
首先,需要在本地安装 Mongodb 数据库和 Mongoose 框架。可以通过以下命令来安装:
Windows安装MongoDB服务
如果需要的话可以配置系统环境变量,比如我自己的MongoDB安装路径(D:\MongoDB\Server\5.0\bin),将此路径放入到系统环境变量,在终端输入
输入:mongo –version 查看MongoDB版本
输入:mongo进入交互式shell
在终端中即可输入MongoDB的语句
Mongoose开发步骤
连接 Mongodb 数据库
在 Node.js 中,可以使用Mongoose 来连接 Mongodb 数据库。可以使用npm安装即可:npm install mongodb mongoose
可以使用以下代码来连接数据库:
// 首先引入 mongoose 这个模块
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/steverocket', {
useNewUrlParser: true,
useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
console.log('connected to database');
});
以上代码将连接名为 "steverocket" 的本地 Mongodb 数据库。如果连接成功,将输出 "connected to database"。
创建 Mongoose 模型
在 Mongoose 中,可以使用模型来定义数据结构和操作数据库。可以使用以下代码来创建一个简单的模型:
const mongoose = require('mongoose');
// 定义结构
const userSchema = new mongoose.Schema({
name: String,
age: Number
});
// 创建模型
const User = mongoose.model('User', userSchema);
以上代码定义了一个名为 "User" 的模型,该模型包含两个属性:name 和 age。
执行完,会自动在数据库中创建一个以第一个参数的复数结尾的集合
操作 Mongodb 数据库
在 Mongoose 中,可以使用模型来操作 Mongodb 数据库。以下是一些常见的操作示例:
创建数据
const user = new User({name:"SteveRocket", age:25});
user.save((err,user)=>{
if (err) return console.error(err);
console.log(user)
});
以上代码创建了一个名为 "SteveRocket" 年龄为 25 的用户,并将其保存到数据库中。
查询数据
User.find({ name: 'SteveRocket' }, function (err, users) {
if (err) return console.error(err);
console.log(users);
});
以上代码查询名为 "SteveRocket" 的用户,并返回所有匹配的用户。
更新数据
User.updateOne({ name: 'SteveRocket' }, { age: 18, function (err, result) {
if (err) return console.error(err);
console.log(result);
});
以上代码将名为 "SteveRocket" 的用户的年龄更新为18
删除数据
User.deleteOne({ name: 'SteveRocket' }, function (err) {
if (err) return console.error(err);
console.log('deleted');
});
以上代码删除名为 "SteveRocket" 的用户。
最后,使用 Mongodb 和Mongoose 可以帮助开发者更方便地操作 NoSQL 数据库。通过定义模型和使用模型来操作数据库,可以提高代码的可读性和可维护性,并帮助开发者更好地管理数据。
参考资料
mongodb:www.mongodb.org/
mongoose:mongoosejs.com/
Schema类型:mongoosejs.com/docs/schema…
更多精彩,关注我公号 ,一起学习、成长
Node.js系列文章推荐阅读: