1、什么是Mongo DB?
MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组。
2、命令行操作Mongo db
2.1 准备工作
官网下载解压mongodb文件
D盘根目录下创建一个文件夹data,在data内部再创建一个文件夹db
进入到mongodb的bin目录,
按住shift,点击鼠标的右键,打开命令行窗口,输入如下指令打开数据库连接池
mongod --dbpath d:datadb
再在此目录中,按住shift,点击鼠标的右键,打开命令行窗口,输入如下指令打开一个连接数据库的客户端,不要关闭上一个窗口
mongo
如果这样不成功,说明是管理员权限的问题,那就需要多走几步路
以管理员身份运行命令行窗口打开数据库连接池
d: cd mongodb (注意你自己的文件夹的名称) cd mongodb-win32-x86_64-2008plus-ssl-4.0.9 cd bin mongod --dbpath d:datadb
以管理员身份运行命令行窗口打开客户端
d: cd mongodb (注意你自己的文件夹的名称) cd mongodb-win32-x86_64-2008plus-ssl-4.0.9 cd bin mongo
2.2 数据库常用命令
2.2.1 help查看命令提示
help db.help() db.test.help() db.test.find().help()
2.2.2 创建切换数据库--------无则创建并且切换,有则切换
db // test use hupeng // switched to db hupeng db // hupeng
2.3.3 查询数据库
show dbs
2.3 collection 聚集集合操作
2.3.1 创建一个聚集集合
db.createCollection(name, options) db.createCollection("collName", {size: 20, capped: true, max: 100});
参数说明:
-
name: 要创建的集合名称
-
options: 可选参数, 指定有关内存大小及索引的选项xsa
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔(可选) | 如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔(可选) | 如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值(可选) | 为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。 |
max | 数值(可选) | 指定固定集合中包含文档的最大数量。 |
2.3.2 得到指定名称的聚集集合
> db.getCollection('users') hupeng.users
3 数据的增删改查
3.1 增
db.collection.insertOne(document) // 向指定集合中插入一条文档数据 db.collection.insertMany(document) // 向指定集合中插入多条文档数据 > db.users.insertMany([{ username: '张三', password: '123', age: 20, sex: '男' },{ username: '李四', password: '456', age: 16, tel: '15738353168', sex: '女' }])
3.2 删
> db.users.deleteOne({password: '123'}) //删除一条,password为123的数据
{ "acknowledged" : true, "deletedCount" : 1 }
> db.users.find().pretty() //查询数据库的数据
> db.users.deleteMany({}) //删除多条
{ "acknowledged" : true, "deletedCount" : 2 }
> db.users.find().pretty()
3.3 改
db.col.updateOne({key: value}, {$set: {key: value}}) //修改第一条key为value的数据 db.col.updateMany({key: value}, {$set: {key: value}}) //修改多条key为value的数据 db.col.updateOne({key: value}, { $inc: {key: num}}) //修改某一条数据的某一个字段key的自增自减num(num为正->加,num为负->减)
3.4 查
> db.users.find().pretty() // 查询所有的数据,显示所有的字段 > db.users.find({},{_id: 0}).pretty() // 不显示_id字段 >db.users.find({},{_id: 0, username: 1, age: 1}).pretty() // 不显示_id字段,显示username字段'和age字段,0为不显示,1为显示 >db.users.find({username: '李四'},{_id: 0}).pretty() //显示username为张三的数据 >db.users.find({age: { $gte: 18, $lte: 20}}, {_id:0}).pretty() // 大于:$gt 大于等于:$gte 小于:$lt 小于等于:$lte >db.users.find({}, {_id: 0}).sort({age: 1}).pretty()//按照年龄排序 .sort({key:num}) num为1表示按照key值升序,为-1表示降序 模糊查询: >db.users.find({username:'四'}, {_id:0}).pretty() // 精确查询,没有数据 没有username为 “四” 的 >db.users.find({username: /四/}, {_id:0}).pretty()//找username中含有 “四” 的数据 >db.users.find({ $or: [{username: /三/}, {username: /四/}]}, {_id:0}).pretty()//查询名字中含有三或者 含有四的 * $or > .distinct('city') //查询所以数据的city字段组成数组,并且去重 > .count() //查询的条数 > .toArray() //转换成数组 > .limit(num) //只能查询num条数据 > .skip(n) //从第n条开始查,下标从0开始
4 封装数据库模块
const sql = {
// 数据库集合靠函数去传递
insert (CollectionName, insertData) { //插入
// 数据库的操作属于异步操作,后续的业务逻辑会交给执行的那个单位
// A 调用了B B包含异步操作,操作完毕 A继续执行业务逻辑
// 异步操作 --- 回调函数 / promise / generator + yeild / async + await
// User.insertMany(insertData, (err) => {
// if (err) throw err;
// console.log('插入成功')
// })
// promise的写法
// return new Promise((resolve, reject) => {
// })
return new Promise((resolve, reject) => {
CollectionName.insertMany(insertData, (err) => {
if (err) throw err;
resolve()
})
})
},
delete (CollectionName, deleteData, deleteType) { //删除
// User.deleteOne(deleteData, (err) => {})
// User.deleteMany(deleteData, (err) => {})
// style.display = "none" <===> style['display'] = "none"
// style.animation = "test" 兼容性
// 对象后的属性不可以是变量,如果有变量,写成 对象[属性] 形式
deleteType = deleteType || 'deleteOne' // 默认为删除单条数据
return new Promise((resolve, reject) => {
CollectionName[deleteType](deleteData, (err) => {
if (err) throw err;
resolve()
})
})
},
update (CollectionName, whereObj, updateObj, updateType) { //修改
updateType = updateType || 'updateOne'
return new Promise((resolve, reject) => {
CollectionName[updateType](whereObj, updateObj, (err) => {
if (err) throw err;
resolve()
})
})
},
find (CollectionName, whereObj, showObj) { //查询
return new Promise((resolve, reject) => {
CollectionName.find(whereObj, showObj).exec((err, data) => {
if (err) throw err;
resolve(data)
})
})
}
}
module.exports = sql