MongoDB
1.1简介
Mongodb是一个介于关系数据库和非关系数据库之间的产品(Nosql),是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似javascript面向对象的查询语言,它是一个面向集合的,模式自由的文档型数据库。Mongodb数据库旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。数据库=>集合=>文档
1.2安装软件
//下载地址:https://www.mongodb.com/download-center/community
//mac
//mac安装:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x-tarball/
//压缩包 https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.4.6.tgz
tar -zxvf mongodb-macos-x86_64-4.4.tgz
mv /xxx/mongodb-macos-x86_64-4.4 /usr/local/mongodb
// 创建数据目录
mkdir -p /usr/local/mongodb/data
mkdir -p /usr/local/ /mongodb/logs
// 启动
mongod --dbpath /usr/local/mongodb/data --logpath /usr/local/mongodb/logs/mongo.log --fork
1.3数据库基本使用
mongo命令进入客户端
show dbs 查看数据库
show tables/show collections 查看集合(查看当前库里面的表)
db 查看当前数据库
use 数据库 切换或创建数据库 如果数据库存在则切换,不存在则先创建后切换
// 添加一个集合对象并向此集合中添加文档
// 集合名有则添加文档,集合不存在时先帮创建集合后创建文件
db.集合名.insert(json对象);
db.c1.insert({name:'user1'});
//查看集合
db.c1.find()
{ "_id" : ObjectId("5c0fa4758878caa23d36c0fb"), "name" : "zhangsan" }
//objectID类型
//ObjectId对象对象数据组成:时间戳 |机器码|PID|计数器 系统自动生成
//_id的键值我们可以自己输入,但是不能重复
// 删除当前的数据库
db.dropDatabase();
//删除集合
db.集合名.drop();
show dbs //显示数据库列表
use 数据库名称 //切换到哪个数据库
show tables //查看数据库中的集合列表
show collections //查看数据库中的集合列表
//添加单条文档数据
db.collection.insertOne({ key: value })
// 添加多条文档数据
db.collection.insertMany([{}, {}, {}])
//可以添加单条也可以多条数据
db.collection.insert( {} )
db.collection.insert([{}, {} ])
// 删除单条文档
db.collection.deleteOne({ key: value })
// 删除符合条件多条文档
db.collection.deleteMany({key: value})
// 删除全部数据
collection.deleteMany({});
//key:value 表示 等于的 意思
db.c1.find(); // 获取全部
db.c1.find({}); // 获取全部
// 条件
//查询指定的字段
db.集合.find({条件},{字段名:[0/1]}) 0不要字段显示, 1要记录显示
//字段值为1取出相对应字段数据 0就表示不取出 _id默认会显示,只有指定为0才不会显示
db.c1.find({name:"user11"},{name:1});
// 条件表达式
// 年龄大于5的
db.c1.find({age:{$gt:5}}); age > 5
//年龄大于等于5的
db.c1.find({age:{$gte:5}}); age >= 5
//年龄小于5的
db.c1.find({age:{$lt:5}}); age < 5
//年龄小于等于5的
db.c1.find({age:{$lte:5}}); age <= 5
// 年龄不等于5的
db.c1.find({age:{$ne:5}}); age != 5
// 在一个指定的数值中查询 $in 年龄在不在这几个指定数值当中
db.c1.find({age:{$in:[1,2,3]})
// 且关系 and
db.集合.find({age:{$lt:5},name:"user11"})
// 或关系 or
db.集合.find({$or:[{条件1},{条件2}]})
db.c1.find({$or:[{age:{$ne:5}},{name: "user11"}]});
//正则
db.集合.find({字段名:/正则/i})
i 不区分大小写
u 支持中文
// 统计记录数量 count
db.c1.count();
db.c1.find().count();
// 排序
// 1 升序 -1 降序 字段
// 以age字段来升序
db.c1.find().sort({age:1})
// 以age字段来降序
db.c1.find().sort({age:-1})
// 指定获取几条 skip/limit 分页
db.c1.find().limit(3);
db.c1.find().skip(1).limit(3);
// 设置
// 只修改单条文档
db.collection.updateOne({key:value}, { $set: { key: value }})
// 修改符合条件所有文档数据
db.collection.updateMany({key:value}, { $set: { key: value }})
// 字段的值的自增和自减
db.collection.updateOne({key:value}, { $inc: { key: 1 }})
db.collection.updateMany({key:value}, { $inc: { key: 1 }})
2.1 Node操作MongoDB
// 安装mongoose
npm i -S mongoose
//导入模块
const mongoose = require('mongoose')
//连接数据库 返回promise对象
mongoose.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true, useUnifiedTopology: true })
connect方法参2在新版本需添加,否则会有警告提示
useNewUrlParser:当前URL字符串分析器已弃用,将在将来的版本中删除。要使用新的解析器,请将选项{usenewurlparser:true}传递给mongoclient.connect。
useUnifiedTopology:当前服务器发现和监视引擎已弃用,将在将来的版本中删除。要使用新的服务器发现和监视引擎,请将选项{useUnifiedTopology:true}传递给mongoclient构造函数
2.2 schema
// 创建用户集合规则
const UserSchema = new mongoose.Schema({
// 字段名/域名称
name: {
// 指字域类型
type: String,
// 必填字段
required: true,
// 字段最小长度 minlength 用于字符串类型
minlength: 2
},
age: {
type: Number,
// 默认值
default:10,
// 字段最小值 min用于数字类型
min: 1
},
pwd: String,
email: String,
// 定义此字段为 字符串数组类型
hobbies: [String]
})
2.3 Model
// 参数1:model名称
// 参数2:schema名称
// 参数3:操作的数据集合 如果参数3没有填写则以 参1的复数形式为操作数据集合名称
const UserModel = mongoose.model('User', UserSchema, 'users')
## 模型curd相关方法
Model.insertMany({key:value})
Model.deleteMany({条件},err=>{})
Model.deleteOne({条件},err=>{})
Model.countDocuments({条件})
Model.find({条件},{可选字段返回:0/1},{skip:0,limit:10})
Model.findOne({条件},{可选字段返回:0/1})
Model.updateMany({条件},{$set:{key:value}},res=>{})
Model.updateOne({条件},{$set:{key:value}},res=>{})