做药品网站有哪些,网站返回404,wordpress自动生成手机快捷方式,保定建站模板搭建用MongoDB实现仓库管理的出库入库 MongoDB什么是MongoDBMongoDB安装以及开始运行配置启动以及mongoshmongodb的基础使用命令启动和使用MongoDB服务数据库操作集合操作文档操作 项目部署在数据库中创建一张商品信息表提供信息表的增删改查操作接口 MongoDB
什么是MongoDB
Mong… 用MongoDB实现仓库管理的出库入库 MongoDB什么是MongoDBMongoDB安装以及开始运行配置启动以及mongoshmongodb的基础使用命令启动和使用MongoDB服务数据库操作集合操作文档操作 项目部署在数据库中创建一张商品信息表提供信息表的增删改查操作接口 MongoDB
什么是MongoDB
Mongodb是一种比较常见的NoSQL类型数据库所谓NoSQL就是Not only SQL非关系型数据库数据在MongoDB中的存储相比MySQL而言比较松散并没有特定的数据结构存储方式类似JSON采用了一种二进制的BSON来进行数据存储。但是MongoDB由于以下的几个优势在互联网需要处理海量数据场景下有独特的优势比较经典的应用场景有微信和Twitter每天数以TB甚至PB级别的数据量。
高性能高可用高扩展丰富的查询支持
MongoDB安装以及开始运行 安装成功运行会看到上面这张结果图。
配置启动以及mongosh
在命令行中输入如下命令 sudo vim /etc/systemd/system/mongodb.service
在打开的mongodb.service文件中填入以下内容
[Unit]
DescriptionHigh-performance, schema-free document-oriented database
Afternetwork.target[Service]
Usermongodb
ExecStart/usr/bin/mongod --quiet --config /etc/mongod.conf[Install]
WantedBymulti-user.target 配置成功以后输入mongo就可以与数据库连接上并进行相关操作。
mongodb的基础使用命令
启动和使用MongoDB服务
# 重新加载配置并启动mongodb
sudo systemctl daemon-reload
sudo systemctl start mongod# 查看运行状态
sudo systemctl status mongod
# 如果mongodb状态为stop则运行 sudo systemctl enable mongod# 停止mongodb
sudo systemctl stop mongod# 重启mongodb
sudo systemctl restart mongod
数据库操作
# 创建和切换数据库命名规范全部小写
use dbname
# 删除数据库,主要是用来删除已经从内存持久化到磁盘中的数据库
db.dropDatabse()
# 显示已经创建的数据库
show dbs集合操作
# 创建集合
db.createCollection(collectionname)
# 删除集合
db.collectionname.drop()
# 显示已经创建的数据库
show dbs注这里还有一个是集合的隐式创建通过在文档操作的时候insert操作如果没有匹配到现有数据库就创建一个。
文档操作
# 创建文档
db.collectionname.insert({BSON格式数据})
# 文档数据查询
db.collectionname.find()
# 文档数据更新直接使用是覆盖更新
db.collectionname.update(query, update, options)
# 局部更新使用$set修改器
db.collectionname.update({userId:1001},{$set:{username张三}})
# 批量更新在option选项中增加multi:true
db.collectionname.update({userId:1001},{$set:{username张三}})
# 文档删除,如果没有带条件就是“删库跑路”
db.collectionname.remove(query)! 注mongodb中默认的是浮点类型的数据因此想使用整型变量的时候需要用NumberInt函数进行转换。
项目部署
在数据库中创建一张商品信息表 由于已经有MongoCampass这个图形化的工具在创建的时候可以使用这个提高效率而不用一行一行输入数据。 创建好集合以后就可以向集合中插入文档数据编辑好一行以后按加号继续编辑下一行。
提供信息表的增删改查操作接口
这个部分的内容有一位大佬总结的很好了这里贴出他的博客非常建议学习他总结的关于Schema和Collection还有Document之间的关系使我茅塞顿开。
//引入mongodb数据库 MongoClient mongo 客户端
const {MongoClient} require(mongodb);// mongo连接网址
const url mongodb://127.0.0.1:27017;//mongo连接 数据库名称
const dbName Shop;async function connect() {
// 注意点由于 MongoClient.connect() 返回的是一个promise对象 因此可以使用async 和 await
// console.log(MongoClient.connect(url)); //MongoClient.connect(url) 返回一个Promise对象const client await MongoClient.connect(url); //链接数据库const db client.db(dbName); //匹配数据库return {client,db}
}//数据库操作之 增函数 参数1集合 参数2data数据增的数据
async function insert(colName, data) {
//1:链接数据库 并且把db 和 client在链接数据库中导出 let {db,client} await connect()//2匹配数据库集合const collection db.collection(colName);
//3需要判断传入的数据 是一条还是多条 一条就是insertOne 多条就是insertMany 在集合之中插入数据 const result await collection[Array.isArray(data) ? insertMany : insertOne](data);
//3关闭数据库连接client.close();return result;
}//数据库之 改
// db.集合的名称.updateOne( {name:ppp,age:10 } , { $set : { name:嘿嘿,age:20} } );
//根据id来修改 数据库中的data
async function update(colName, query, newData) { //newData{$set:{price:200,qty:2},$inc:{view:1}}let {db,client} await connect();let collection db.collection(colName);//根据id删除 数据if (query._id typeof query._id string) {query._id ObjectId(query._id);}let result await collection.updateOne(query, newData);console.log(result result);return result;}//数据库之 删
// db.集合的名称.deleteMany({name:ppp})
async function remove(colName, query) {//1链接数据库let {db,client} await connect()//根据id删除 数据if (query._id typeof query._id string) {query._id ObjectId(query._id);}//2匹配集合let collection db.collection(colName);//判断是删除一条还是多条let result await collection.deleteMany(query);client.close();return result;}
// //查 函数
// 操作数据库的前提是引入数据库还有连接网址连接数据库名称数据库的链接
// 方法里面数据库的链接里面有着链接数据库 匹配数据库集合最后根据所选的集合 操作数据库 最后关闭数据库
async function find(colName, query {}, options {}) { //参数1数据库中的集合表 参数2操作的数据库语句 参数3配置参数 //1:链接数据库let {db,client} await connect();//2:匹配数据库集合 let collection db.collection(colName);//3最后根据所选的集合 操作数据库 查询操作let result collection.find(query);//分页功能 需要的参数页数 限制显示的多少页 跳过的数据条数 eg: 1页-0~5-0条 2页-5~10条-5条 3页-10~15-10条//01查询跳过的记录if (options.skip) {result result.skip(options.skip) //result.skip()方法 设置跳过记录 }//02设置显示的条数if (options.limit) {result result.limit(options.limit)}//排序的功能if (options.sort) { //前端传来的之 [price] 或者[price,1] 第一种为默认的降序 第二种为升序let key, val;key options.sort[0]; //拿到key值 if (options.sort.length 1) {val options.sort[1] * 1;} else {val -1;}result result.sort({ //对象[字符串] [key]: val})}result await result.toArray(); //返回的是一个数组的形式给与前端//最后 客户端关闭数据库 client.close();return result; //返回查询结果 一个promise对象}//把增删改查 到出 在引入这个工具函数时候 调用module.exports {insert,find,update,remove}
调用接口
const express require(express);
const router express.Router();const mongo require(./mongo);
const { ObjectId } require(mongodb);const colc_name goods
//post 方式 增加数据
router.post(/insert, async (req, res) {// db.集合的名称.insertMany([{name:名称,age:11},{name:www,age:20}])// insert() 参数1数据库集合 参数2插入的数据 插入一条数据的话 直接一个对象 插入多条数据的话 [{},{}] 对象里面书写插入的参数// let result await mongo.insert(goods2, {// name: ppp,// purchase: 1件起购,// oldprice: 12345.00,// });let result await mongo.insert(colc_name, [{name: ppp,purchase: 1件起购,oldprice: 222,}, {name: lll,purchase: 1件起购,oldprice: 111,}]);res.send(插入成功result);
})
//查询
router.get(/search, async (req, res) {//分页效果//设置默认显示的条数还有第几页 并且获取到前端发来的请求参数let {//page 第一页 size为显示条数大小为10 sort默认的排序降 根据nowPrice排序 注意点nowPrice一定是数值型 不带page 1, size 10, sort oldprice} req.query;//设置skip跳过的记录 还有限制显示的那些数据条数let skip (page - 1) * size;let limit size * 1;//排序的参数处理sort sort.split(,); //参数传递price,1等等 [price],[price,-1]//find()参数参数1数据库中的集合表 参数2操作的数据库语句 参数3配置参数 let result await mongo.find(colc_name, {}, {skip,limit,sort});res.send(result);
})
//删除数据
router.delete(/:id, async (req, res) {// router.delete(/:name, async (req, res) {const {id// name} req.params;// console.log(name name);var objectId new ObjectId(id)try {const result await mongo.remove(colc_name, {_id: id})// const result await mongo.remove(goods2, {// name: name// })res.send(success)return result;} catch (err) {res.send(err);}})
//修改数据router.put(/:id, async (req, res) {let {id} req.params;console.log(id id);// let whereDate {// name: ooo// }let whereDate {_id: id}let updataDate {$set: {name: zzz,oldPrice: 200,},$inc: {view: 1}}console.log(whereDate, updataDate); //oktry {let result await mongo.updata(colc_name, whereDate, updataDate);res.send(success);} catch (err) {res.send(fail)}})
module.exports router;
在定义了所有的接口以后统一导出然后就能通过router中的url来访问了。