文章目录
1、mongoDB的简介
-
MongoDB是一个流行的开源文档型数据库,它使用类似 JSON 的文档模型存储数据,这使得数据存储变得非常灵活。
-
MongoDB 是一个基于文档的 NoSQL 数据库,由 MongoDB Inc. 开发。
-
MongoDB 旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
-
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
-
MongoDB的设计理念是为了应对大数据量、高性能和灵活性需求。
。
-
MongoDB使用集合(Collections)来组织文档(Documents),每个文档都是由键值对组成的。
数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。
集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。
文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储
特点- 文档导向的存储:MongoDB 是一个面向文档的数据库,它以 JSON-like 的格式存储数据,使得数据结构更加灵活和丰富。
- 索引优化查询:MongoDB 允许用户为文档中的任意属性创建索引,例如 FirstName 和 Address,从而提高查询效率和排序性能。
- 数据镜像与扩展性:通过本地或网络创建数据的副本,MongoDB 实现了强大的数据冗余和扩展能力。
- 水平扩展与分片:面对增加的负载,MongoDB 可以通过分片技术将数据分布到计算机网络中的其他节点上,实现水平扩展
- 强大的查询语言:MongoDB 使用 JSON 格式的查询语法,支持复杂的查询表达式,包括对内嵌对象和数组的查询。
- 数据更新:利用 update() 命令,MongoDB 能够替换整个文档或更新指定的数据字段,提供了灵活的数据更新方式。
- MapReduce 批量处理:MongoDB 的 MapReduce 功能专为大规模数据处理和聚合操作设计,通过 Map 函数的 emit(key, value) 调用和 Reduce 函数的逻辑处理,实现高效的数据汇总。
- MapReduce 脚本编写:Map 和 Reduce 函数使用 JavaScript 编写,可以通过 db.runCommand 或 mapreduce 命令在 MongoDB 中执行。
- GridFS 大文件存储:GridFS 是 MongoDB 内置的功能,用于存储和检索大于 BSON 文档大小限制的文件,如图片和视频。
- 服务端脚本执行:MongoDB 允许在服务端执行 JavaScript 脚本,提供了直接在服务端执行或存储函数定义以供后续调用的能力。
- 多语言支持:MongoDB 提供了对多种编程语言的支持,包括但不限于 RUBY、PYTHON、JAVA、C++、PHP 和 C#。
- 安装简单:MongoDB 的安装过程简单直观,便于用户快速部署和使用。
2、mongoDB的安装及配置
进入官网--->点击社区版进入下载页面
选择版本,支持的计算机系统,进行下载,下载的是.msi文件
可以通过点击 "Custom(自定义)" 按钮来设置你的安装目录。
下一步安装 "install mongoDB compass" 不勾选(当然你也可以选择安装它,可能需要更久的安装时间),MongoDB Compass 是一个图形界面管理工具,我们可以在后面自己到官网下载安装下载地址也可以勾选安装的比较慢,可以耐心等待。
可以通过mongoDBCompass应用打开控制面板,进行数据库设置,也可以通过指令操作,可以建项目用到的表
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8e0bcca30da546a5aba8642bb0b00039.png
可以添加数据或者导入json数据
导入数据成功
3、node.js项目中mongoDB使用
3.1.引入库
新建文件夹,初始化package.json文件
javascript
npm init -y
项目中执行指令运用MongoDB,会安装依赖包
javascript
npm install mongodb
# or ...
yarn add mongodb
项目中应用,运行程序指令,code.js为文件名
javascript
node ./code.js
code.js文件
javascript
const { MongoClient } = require('mongodb');
// or as an es module:
// import { MongoClient } from 'mongodb'
// Connection URL
const url = 'mongodb://localhost:27017';
const client = new MongoClient(url);
// Database Name
const dbName = 'test';
async function main() {
// Use connect method to connect to the server
await client.connect();
// 取出数据库
const db = client.db(dbName);
// 从数据库中取出集合对象
const collection = db.collection('person');
// 添加返回所有文档的查询。
let pers = await collection.find({}).toArray();
console.log(pers);
return 'done.';
}
main()
.then(console.log)
.catch(console.error)
.finally(() => client.close());
3.2.数据操作增删改
-
新增数据
- insertOne() 方法用于在集合中插入单个文档。
db.collection.insertOne(document, options)
document:要插入的单个文档。
options(可选):一个可选参数对象,可以包含 writeConcern 和 bypassDocumentValidation 等。 - insertMany() 方法用于在集合中插入多个文档。
db.collection.insertMany(documents, options)
documents:要插入的文档数组。
options(可选):一个可选参数对象,可以包含 ordered、writeConcern 和 bypassDocumentValidation 等。 - db.collection.save()方法在插入文档时表现得类似于 insertOne()。
db.collection.save(document, options)
document:要保存的文档。
options(可选):一个可选参数对象,可以包含 writeConcern 等。 - options 参数
- ordered(仅适用于 insertMany):布尔值。如果为 true,则按顺序插入文档,在遇到错误时停止;如果为 false,则尝试插入所有文档,即使遇到错误也继续。默认值为 true。
- writeConcern:指定写操作的确认级别。
- bypassDocumentValidation:布尔值。如果为 true,则忽略集合的文档验证规则。
javascript// 新增数据 let insertResult = await collection.insertMany([ { name:'西西(女)' , age:12 } ]); console.log(insertResult);
insertMany 命令返回一个对象,其中包含有关 insert 操作的信息。
上图信息:修改成功,修改一条,修改的id - insertOne() 方法用于在集合中插入单个文档。
-
修改数据
- updateOne() 方法用于更新匹配过滤器的单个文档。
db.collection.updateOne(filter, update, options)
filter:用于查找文档的查询条件。
update:指定更新操作的文档或更新操作符。
options:可选参数对象,如 upsert、arrayFilters 等。 - updateMany() 方法用于更新所有匹配过滤器的文档。
db.collection.updateMany(filter, update, options)
filter:用于查找文档的查询条件。
update:指定更新操作的文档或更新操作符。
options:可选参数对象,如 upsert、arrayFilters 等。 - replaceOne() 方法用于替换匹配过滤器的单个文档,新的文档将完全替换旧的文档。
db.collection.replaceOne(filter, replacement, options)
filter:用于查找文档的查询条件。
replacement:新的文档,将替换旧的文档。
options:可选参数对象,如 upsert 等。 - findOneAndUpdate() 方法用于查找并更新单个文档,可以选择返回更新前或更新后的文档。
db.collection.findOneAndUpdate(filter, update, options)
filter:用于查找文档的查询条件。
update:指定更新操作的文档或更新操作符。
options:可选参数对象,如 projection、sort、upsert、returnDocument 等。 - options 参数
upsert:如果没有匹配的文档,是否插入一个新文档。
arrayFilters:当更新嵌套数组时,指定应更新的数组元素的条件。
collation:指定比较字符串时使用的排序规则。
returnDocument:在 findOneAndUpdate 中使用,指定返回更新前 ("before") 或更新后 ("after") 的文档。
javascriptconst updateResult = await collection.updateMany({name:'西西'},{ $set:{ age:18 } }); console.log(updateResult);
- updateOne() 方法用于更新匹配过滤器的单个文档。
-
删除数据
- deleteOne() 方法用于删除匹配过滤器的单个文档。
db.collection.deleteOne(filter, options)
// filter 用于查找要删除的文档的查询条件。 options(可选):一个可选参数对象。 - deleteMany() 方法用于删除所有匹配过滤器的文档。
db.collection.deleteMany(filter, options)
filter:用于查找要删除的文档的查询条件。options(可选):一个可选参数对象。 - findOneAndDelete() 方法用于查找并删除单个文档,并可以选择返回删除的文档。
db.collection.findOneAndDelete(filter, options)
filter:用于查找要删除的文档的查询条件。options:可选参数对象,如 projection、sort 等。
javascript// 删除数据 西西 const deleteResult = await collection.deleteMany({ _id: new ObjectId("6736b73c48a9f999c6acfe2d") }) console.log(deleteResult)
返回信息解析:执行成功,删除一条数据 - deleteOne() 方法用于删除匹配过滤器的单个文档。
4、mongoDB的查询
4.1.查询
使用 find()、findOne() 方法。
-
find()
方法以非结构化的方式来显示所有文档。javascriptdb.collection.find(query, projection)
query:用于查找文档的查询条件。默认为 {},即匹配所有文档。
projection(可选):指定返回结果中包含或排除的字段。
返回数据格式
返回数组,可以使用 toArray() 方法
javascriptlet pers = await collection.find({}).toArray(); console.log(pers);
-
findOne()
用于查找集合中的单个文档。如果找到多个匹配的文档,它只返回第一个。javascriptdb.collection.findOne(query, projection)
query:用于查找文档的查询条件。默认为 {},即匹配所有文档。
projection(可选):指定返回结果中包含或排除的字段。
javascriptlet pers = await collection.findOne({name: '西西(女)'}) console.log(pers);
4.2.高级查询
-
比较操作符
比较操作符:
$gt、$lt、$gte、$lte、$eq、$ne 、$in、 $nin
小于 $lt
小于等于 $lte
大于 $gt
大于等于 $gte
不等于 $ne
等于 $eq
在指定的数组中 $in
不在指定的数组中 $nin
javascriptlet pers = await collection.find({age: { $lt: 25 }}).toArray(); console.log(pers);
-
逻辑操作符
$and、$or、$not、$nor
$and
逻辑与,符合所有条件$or 逻辑或,符合任意条件
$not 取反,不符合条件
$nor 逻辑与非,均不符合条件
javascriptlet pers = await collection.find({$and: [{name: '小黑'}, {age: 67}]}).toArray(); console.log(pers);
-
使用正则表达式
使用正则表达式进行模式匹配查询。
javascriptlet pers = await collection.find({name: /黑/}).toArray(); console.log(pers);
-
排序
对查询结果进行排序。
javascriptlet pers = await collection.find({name: /黑/}).sort({ age: -1 }).toArray(); console.log(pers);
-
限制与跳过
可以对查询结果进行限制和跳过指定数量的文档。
javascriptlet pers = await collection.find({}).sort({age: -1}).skip(5).limit(5).toArray(); console.log(pers);