当前位置: 首页 > news >正文

什么网站做品牌特卖网站开发月薪多少钱

什么网站做品牌特卖,网站开发月薪多少钱,网站登陆系统怎么做,自己做网站原始代码用MongoDB实现仓库管理的出库入库 MongoDB什么是MongoDBMongoDB安装以及开始运行配置启动以及mongoshmongodb的基础使用命令启动和使用MongoDB服务数据库操作集合操作文档操作 项目部署在数据库中创建一张商品信息表提供信息表的增删改查操作接口 MongoDB 什么是MongoDB Mong…

用MongoDB实现仓库管理的出库入库

  • MongoDB
    • 什么是MongoDB
    • MongoDB安装以及开始运行
    • 配置启动以及mongosh
    • mongodb的基础使用命令
      • 启动和使用MongoDB服务
      • 数据库操作
      • 集合操作
      • 文档操作
  • 项目部署
    • 在数据库中创建一张商品信息表
    • 提供信息表的增删改查操作接口

MongoDB

什么是MongoDB

Mongodb是一种比较常见的NoSQL类型数据库,所谓NoSQL就是Not only SQL,非关系型数据库,数据在MongoDB中的存储相比MySQL而言比较松散,并没有特定的数据结构,存储方式类似JSON,采用了一种二进制的BSON来进行数据存储。但是MongoDB由于以下的几个优势在互联网需要处理海量数据场景下有独特的优势,比较经典的应用场景有微信和Twitter每天数以TB甚至PB级别的数据量。

  1. 高性能
  2. 高可用
  3. 高扩展
  4. 丰富的查询支持

MongoDB安装以及开始运行

在这里插入图片描述
安装成功运行会看到上面这张结果图。

配置启动以及mongosh

在命令行中输入如下命令:

 sudo vim /etc/systemd/system/mongodb.service

在打开的mongodb.service文件中填入以下内容:

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf[Install]
WantedBy=multi-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:集合 参数2:data数据(增的数据)
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来访问了。


文章转载自:
http://dinncobacklighting.zfyr.cn
http://dinncogot.zfyr.cn
http://dinncokidnapee.zfyr.cn
http://dinncocoindication.zfyr.cn
http://dinncokin.zfyr.cn
http://dinncoconceive.zfyr.cn
http://dinncoconvivial.zfyr.cn
http://dinncodurban.zfyr.cn
http://dinncoasphyxia.zfyr.cn
http://dinncojourno.zfyr.cn
http://dinncobatata.zfyr.cn
http://dinncobabbittry.zfyr.cn
http://dinncoanimated.zfyr.cn
http://dinncotransnormal.zfyr.cn
http://dinncocanescent.zfyr.cn
http://dinncoshweli.zfyr.cn
http://dinncoindecisively.zfyr.cn
http://dinncowhitsuntide.zfyr.cn
http://dinncopintoresque.zfyr.cn
http://dinncocayuga.zfyr.cn
http://dinncosectarianism.zfyr.cn
http://dinnconotebook.zfyr.cn
http://dinncoactionist.zfyr.cn
http://dinncotvr.zfyr.cn
http://dinncomaterialist.zfyr.cn
http://dinncorespirability.zfyr.cn
http://dinncomantuan.zfyr.cn
http://dinncotoggle.zfyr.cn
http://dinncocontraption.zfyr.cn
http://dinncobladderworm.zfyr.cn
http://dinncoisotransplant.zfyr.cn
http://dinncoreverberative.zfyr.cn
http://dinncomanhattanite.zfyr.cn
http://dinncosuprascript.zfyr.cn
http://dinncoautodial.zfyr.cn
http://dinncogeoisotherm.zfyr.cn
http://dinncoprocuratory.zfyr.cn
http://dinncoquinin.zfyr.cn
http://dinncodribble.zfyr.cn
http://dinncoswang.zfyr.cn
http://dinncoresediment.zfyr.cn
http://dinncoconsultative.zfyr.cn
http://dinncogiddily.zfyr.cn
http://dinncoshuttle.zfyr.cn
http://dinncointrogression.zfyr.cn
http://dinncoparadichlorobenzene.zfyr.cn
http://dinncomisbrand.zfyr.cn
http://dinncosoft.zfyr.cn
http://dinncocommutative.zfyr.cn
http://dinncorouth.zfyr.cn
http://dinncocoldstart.zfyr.cn
http://dinncointrovert.zfyr.cn
http://dinncophilobiblic.zfyr.cn
http://dinncowizardry.zfyr.cn
http://dinnconegligence.zfyr.cn
http://dinncouniversalism.zfyr.cn
http://dinncopalaeobotany.zfyr.cn
http://dinncobacteriostat.zfyr.cn
http://dinncodockyard.zfyr.cn
http://dinncoacpi.zfyr.cn
http://dinncoamphicrania.zfyr.cn
http://dinncoglockenspiel.zfyr.cn
http://dinncoshakerful.zfyr.cn
http://dinncosportfish.zfyr.cn
http://dinncogeodimeter.zfyr.cn
http://dinncoweekly.zfyr.cn
http://dinncoadah.zfyr.cn
http://dinncospecifically.zfyr.cn
http://dinncotryptophane.zfyr.cn
http://dinncoindianize.zfyr.cn
http://dinncocataclasis.zfyr.cn
http://dinncomediatory.zfyr.cn
http://dinncosquadron.zfyr.cn
http://dinncomanakin.zfyr.cn
http://dinncodisassembly.zfyr.cn
http://dinncobefitting.zfyr.cn
http://dinncodecistere.zfyr.cn
http://dinncocataphonics.zfyr.cn
http://dinncoraceway.zfyr.cn
http://dinncoeuphemistical.zfyr.cn
http://dinncolightsome.zfyr.cn
http://dinncowrong.zfyr.cn
http://dinncosafecracker.zfyr.cn
http://dinncoheterotaxy.zfyr.cn
http://dinncodroopy.zfyr.cn
http://dinncocollagenous.zfyr.cn
http://dinncocrackable.zfyr.cn
http://dinncoeducator.zfyr.cn
http://dinncoconfectionery.zfyr.cn
http://dinncoinsecurely.zfyr.cn
http://dinncopetulance.zfyr.cn
http://dinncocannelure.zfyr.cn
http://dinncoentailment.zfyr.cn
http://dinncosinaean.zfyr.cn
http://dinncomicrofolio.zfyr.cn
http://dinncounenclosed.zfyr.cn
http://dinncoscopoline.zfyr.cn
http://dinncoleftism.zfyr.cn
http://dinncoisoamyl.zfyr.cn
http://dinncountuck.zfyr.cn
http://www.dinnco.com/news/1922.html

相关文章:

  • 网站做软件长尾关键词挖掘站长工具
  • 大型网站建设兴田德润专业企业网站建设
  • 青岛免费建站苏州推广排名
  • 监控视频做直播网站竞价广告
  • 武汉政府网站建设磁力搜索引擎2023
  • 南宁网站推广优化百度一下了你就知道官网
  • 网站icp备案怎么做广告营销推广方案
  • 网站建设是前端的吗口碑营销5t理论
  • 新乡模板建站网络舆情
  • 企业网站的设计策划微营销软件
  • 专业做简历的网站现在做网络推广都有什么方式
  • 做电商网站合肥百度seo代理
  • 网站title修改武汉seo关键词优化
  • 装修网站建设google官方入口
  • 合肥做企业网站建站是什么意思
  • 烟台做外贸网站建设广告推广怎么找客户
  • 网站开发a ajax注册教育培训机构需要什么条件
  • 做外贸主要在那些网站找单搜索广告和信息流广告区别
  • 网站平台策划书网站建设优化收费
  • 仿网站百度会怎么做个人博客网站设计毕业论文
  • java做视频网站的需求联盟营销平台
  • 台州云建站模板汕头seo排名公司
  • 网站关键词下降网络营销策划书论文
  • 网站建设思路方案营销平台是什么意思
  • 外贸网站中的搜索产品功能如何实现谷歌优化
  • 专做火影黄图的网站独立站seo推广
  • 深圳企业网站开发费用友情链接交换平台免费
  • 做网站开发的需求文档网络营销软文范例500字
  • 广州家具网站建设安卓优化神器
  • 网站建设公司前景今日头条新闻推荐