一.什么是MongoDB
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
特点:
-
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
-
可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
-
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
-
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
-
MongoDB安装简单。
二.MongoDB的概念解析
数据库
一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表。
$ ./mongo
MongoDB shell version: 3.0.6
connecting to: test
> show dbs
local 0.078GB
test 0.078GB
>
执行 "db" 命令可以显示当前数据库对象或集合。
> db
test
>
运行 "use" 命令,可以连接到一个指定的数据库。
> use local
switched to db local
> db
local
>
MongoDB的数据类型
常见的几种数据类型:
文档
文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
下列是MongoDB与关系型数据库的对于术语:
注:
- 文档中的键/值对是有序的。
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型。
- MongoDB区分类型和大小写。
- MongoDB的文档不能有重复的键。
- 文档的键是字符串。
三.MongoDB的基本使用
启动和关闭数据库
启动:
#mongodb默认执行mongod命令所处盘符根目录下的/data/db 作为自己的数据存储目录
#第一次执行该命令之前要手动新建一个/data/db
mongod
#若想修改默认存储目录
mongod --dbpath=数据存储目录路径
停止:
直接Ctrl + C即可或者直接关闭开启服务的控制台
连接数据库
连接:
#该命令默认连接本机的MongoDB服务
mongo
退出:
#在连接状态输入exit退出
exit
在Node如何操作MongDB数据库:
1.使用官方mongodb包来操作。
2.使用第三方mongoose来操作。
使用第三方mongoose操作:
安装包:
npm i mongoose
mongoose的相关使用:
// 导入mongoose
const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/itcast');
// 设计文档表结构
// 字段名称就是表的属性名称
// 约束是为了保证文档的完整性
const Schema = mongoose.Schema
const userSchema = new Schema({
username: {
type: String,
required: true
},
password: {
type: String,
required: true
},
email: {
type:String
}
})
// 把文档结构发布为模型
// 第一个参数:传入一个大写名词字符串作为数据库名称
// mongoose会自动将大写名词字符串生成小写复数的集合名称
// 返回值:模型构造函数
const User = mongoose.model('User', userSchema);
const admin = new User({
username: 'admin',
password:'123456',
email:'admin@admin.com'
})
// 插入数据
admin.save((err, results) => {
if (err) return console.log('default');
return console.log('保存成功'+results);
})
// 查询数据
// 查询所有
User.find((err, results) => {
if (err) return console.log('default');
return console.log(results);
})
// 按条件查询所有
User.find({username:'zs'}, (err, results) => {
if (err) return console.log('default');
return console.log(results);
})
// 按条件查询单个
User.findOne({username:'admin'}, (err, results) => {
if (err) return console.log('default');
return console.log(results);
})
// 删除数据
User.deleteOne({id:'6264d223e8862768313fb541'}, (err, results) => {
if (err) return console.log('default');
return console.log('删除成功'+results);
})
// 更新数据
User.updateOne({_id: "6264df321679de0656c4109e"},{password:'123'}, (err, results) => {
if (err) return console.log(err);
return console.log('更新成功' + results);
})