MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/
数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序
数据库的主要作用就是 管理数据 ,对数据进行 增(c)、删(d)、改(u)、查(r)
相比于纯文件管理数据,数据库管理数据有如下特点:
Mongodb 中有三个重要概念需要掌握
通过 JSON 文件来理解 Mongodb 中的概念
. 一般情况下
. - 一个项目使用一个数据库
. - 一个集合会存储同一种类型的数据
下载地址: https://www.mongodb.com/try/download/community
建议选择 zip
类型, 通用性更强
配置步骤如下:
运行命令 mongod
(相当于运行mondod.exe文件)waiting for connections
则表明服务 已经启动成功现在是服务端!!!!
现在的服务端是mongodb服务,支持mongodb协议
. 重新打开一个窗口,使用 mongo 命令连接本机的 mongodb 服务
注意:
- 为了方便后续方便使用 mongod 命令,可以将 bin 目录配置到环境变量 Path 中
- 千万不要选中服务端窗口的内容 ,选中会停止服务,可以 敲回车 取消选中
命令行交互一般是学习数据库的第一步,不过这些命令在后续用的比较少,所以了解即可。
db
use 库名
db.dropDatabase()
db.createCollection('集合名称')
show collections
db.集合名.drop()
db.集合名.renameCollection('newName')
db.集合名.insert(文档对象);
db.集合名.find(查询条件)
(_id 是 mongodb 自动生成的唯一编号,用来唯一标识文档)db.集合名.update(查询条件,新的文档)
db.集合名.update({name:'张三'},{$set:{age:19}})
db.集合名.remove(查询条件)
Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/
另一种交互方式 : 我们在命令行使用mongo
mongo服务器的默认端口是
27017
> show dataBase1
uncaught exception: Error: don't know how to show [dataBase1] :
shellHelper.show@src/mongo/shell/utils.js:1211:11
shellHelper@src/mongo/shell/utils.js:838:15
@(shellhelp2):1:1
> use dataBase1
switched to db dataBase1
> db.createCollection('collect1')
{ "ok" : 1 }
> db.collect1.insert({name:'lucy',age:20})
WriteResult({ "nInserted" : 1 })
> db.collect1.insert({name:'flavia',age:19})
WriteResult({ "nInserted" : 1 })
> db.collect1.insert({name:'ping',age:22})
WriteResult({ "nInserted" : 1 })
> db.collect1.find()
{ "_id" : ObjectId("6512d475aa0c865bbe64a957"), "name" : "lucy", "age" : 20 }
{ "_id" : ObjectId("6512d488aa0c865bbe64a958"), "name" : "flavia", "age" : 19 }
{ "_id" : ObjectId("6512d495aa0c865bbe64a959"), "name" : "ping", "age" : 22 }
> show dbs
admin 0.000GB
config 0.000GB
dataBase1 0.000GB
local 0.000GB
//导入mongoose
const mongoose=require('mongoose')
//连接mongodb服务
//协议名://主机:端口/数据库名
mongoose.connect('mongodb://127.0.0.1:27017/dataBase1')
// 设置连接成功的回调
// on绑定事件
mongoose.connection.on('open',()=>{
console.log('连接成功')
});
// 设置连接失败的回调
mongoose.connection.on('error',()=>{
console.log('连接失败')
});
// 设置连接关闭的回调
mongoose.connection.on('close',()=>{
console.log('连接关闭')
});
//设置定时关闭连接
setTimeout(()=>{
mongoose.disconnect()
},3000)
官方推荐使用once进行连接
//官方推荐使用once
mongoose.connection.once('open',()=>{
console.log('连接成功')
});
const mongoose = require('mongoose')
mongoose.connect('mongodb://127.0.0.1:27017/dataBase1')
// 设置连接成功的回调
//官方推荐使用once(在open时)
mongoose.connection.once('open', async () => {
// 创建文档的结构对象————设置集合中文档的属性 以及属性值的类型
let collect2Schema = new mongoose.Schema({
name: String,
author: String,
price: Number
})
// 创建模型对象————对文档操作的封装对象
// 参数(集合名称,结构对象)
let collect2Model = mongoose.model('collect2', collect2Schema)
try {
const data = await collect2Model.create({
name: 'a书',
author: 'lucy',
price: 19.9
});
console.log(data);
console.log('连接成功');
} catch (err) {
console.log(err);
}
console.log('连接成功')
});
// 设置连接失败的回调
mongoose.connection.on('error', () => {
console.log('连接失败')
});
// 设置连接关闭的回调
mongoose.connection.on('close', () => {
console.log('连接关闭')
});
类型 | 描述 |
---|---|
String | 字符串 |
Number | 数字 |
Boolean | 布尔值 |
Array | 数组,也可以使用 [] 来标识 |
Date | 日期 |
Buffer | Buffer 对象 |
Mixed | 任意类型,需要使用 mongoose.Schema.Types.Mixed 指定 |
ObjectId | 对象 ID,需要使用 mongoose.Schema.Types.ObjectId 指定 |
Decimal128 | 高精度数字,需要使用 mongoose.Schema.Types.Decimal128 指定 |
let collect2Schema = new mongoose.Schema({
name: {
type:String,
required:true
},
author: String,
price: Number,
isHot:Boolean
})
let collect2Model = mongoose.model('collect2', collect2Schema)
// 新增
try {
const data = await collect2Model.create({
name: 'a书',
author: 'lucy',
price: 19.9,
})
console.log(data);
console.log('连接成功');
} catch (err) {
console.log(err);
}
author: {
type: String,
default: '匿名' //默认值
},
gender: {
type: String,
enum: ['男','女'] //设置的值必须是数组中的
},
要插入的这个值必须是独一无二的,不能有重复的此条数据。
username: {
type: String,
unique: true
},
unique 需要 重建集合 才能有效果 永远不要相信用户的输入
数据库的基本操作包括四个,增加(create),删除(delete),修改(update),查(read)
我们可以使用图形化的管理工具来对 Mongodb 进行交互,这里演示两个图形化工具