Nodejs中mongodb的使用及封装

//res.result.n 结果 ok 状态

//res.ops内容 数组

//result.insertedId 插入后的id

//删:

deleteOne({条件},(err,result)=>{})

//改:

updateOne({条件},{更新后},(err,res)=>{})

updateMany({条件},{更新后},(err,res)=>{})

updateMany({条件},{更新后},{配置},(err,res)=>{})

//配置: upsert:true 插入 projection:true 全局替换

//查:

user.find({条件},{skip:1,limit:1,projection:{key:1}},(err,result)=>{result=对象})

user.find({条件},{projection:{key:0}}).toArray((err,result)=>{reulst==arr})

user.countDocuments((err,num)=>{num返回数量})

//排

user.find(…).sort({key:-1}).toArray…

user.find({},{projection:{},sort:{key:-1}}).toArray…

关闭库

client.close()

Nodejs+mongodb代码
  • 先在mongodb里创建库student

在这里插入图片描述

  • 再创建其下的集合user

在这里插入图片描述

  • 插入数据

在这里插入图片描述

  • 查看

在这里插入图片描述

Nodejs+mongodb

// 1.安装引入

const mongodb = require(‘mongodb’)

// 2.实例化

const mongoCt = mongodb.MongoClient

// 3.连接 mongodb 默认端口 27017 回调 err 错误 client 连接后的客户端

mongoCt.connect(‘mongodb://127.0.0.1:27017’, { useUnifiedTopology: true },(err, client) => {

if (!err) {

// 4.链接库

let db = client.db(‘student’)

// 5.链接集合

let user = db.collection(‘user’)

// 6.集合相关操作 user.API() 集合操作 返回 对象

// 增

// insertOne(对象数据,(err,res)=>{}) //res = 对象

// user.insertOne({“username” : “熊大”, “age” : “17”, “address” : “树林”},(err,res)=>{

// if(!err){

// // console.log(res)

// console.log(res.result.n) //结果 ok 1

// console.log(res.ops)// 数组

// /* [

// {

// username: ‘熊大’,

// age: ‘17’,

// address: ‘树林’,

// _id: 5e6f574fa9dc53365059251d

// }

// ]*/

// console.log(res.insertedId)// 插入后的id 5e6f575ea8e1d721fc88552c

// // 7.关闭链接 要在异步回调里关闭链接 否则会执行不了集合相关操作

// client.close()

// }

// })

// user.insertMany([{“username” : “李二”, “age” : “25”, “address” : “北京”},

// {“username” : “刘彦”, “age” : “17”, “address” : “上海”}],(err,res)=>{

// console.log(res.ops)

// /*

// [

// {

// username: ‘李二’,

// age: ‘25’,

// address: ‘北京’,

// _id: 5e6f59f436b34d37a4f2116f

// },

// {

// username: ‘刘彦’,

// age: ‘17’,

// address: ‘上海’,

// _id: 5e6f59f436b34d37a4f21170

// }

// ]

// */

// console.log(res.insertedIds)//{ ‘0’: 5e6f59f436b34d37a4f2116f, ‘1’: 5e6f59f436b34d37a4f21170 }

// // 7.关闭链接

// client.close()

// })

// 删除

//deleteOne({条件},(err,result)=>{})

//deleteMany({条件},(err,result)=>{})

// user.deleteMany({username:‘熊大’},(err,res)=>{

// console.log(res.ops)

// console.log(res.insertedIds)

// // 7.关闭链接

// client.close()

// })

// 更新

//updateMany({条件},{更新后},{配置},(err,res)=>{}) 配置: upsert:true 插入 projection:true 全局替换

// user.updateMany(

// {age:{$gt:22}},

// {$set:{address:“人民公园”}}

// // { upsert:true},

// // {projection:true }

// ,(err,result)=>{

// console.log(“result”,result)

// // 7.关闭链接

// client.close()

// })

// 查询操作

// user.find({条件},{skip:1,limit:1,projection:{key:1}},(err,result)=>{result=对象})

// user.find({条件},{projection:{key:0}}).toArray((err,result)=>{reulst==arr})

// user.countDocuments((err,num)=>{num返回数量})

// user.find({age:{$gt:30}},(err,res)=>{

// res.toArray((err,data)=>{

// console.log(‘data’,data)

// /*

// data [

// {

// _id: 5e6f5ead75428112e5cc9c47,

// username: ‘黄河’,

// age: 35,

// address: ‘人民公园’

// },

// {

// _id: 5e6f5ead75428112e5cc9c48,

// username: ‘李而’,

// age: 33,

// address: ‘人民公园’

// }

// ]

// */

// 7.关闭链接

// client.close()

// })

// })

// user.find({age:{$gt:30}}).toArray((err,data)=>{

// console.log(‘data’,data)

// /*

// data [

// {

// _id: 5e6f5ead75428112e5cc9c47,

// username: ‘黄河’,

// age: 35,

// address: ‘人民公园’

// },

// {

// _id: 5e6f5ead75428112e5cc9c48,

// username: ‘李而’,

// age: 33,

// address: ‘人民公园’

// }

// ]

// */

// 7.关闭链接

// client.close()

// })

// 排序与分页

user.find({},{

skip:3, //跳过两个数据

limit:2, //拿到两个数据

sort:{age:1,_id:-1} // 先按age升序排列 age若相同 则按_id降序排列

}).toArray((err,res)=>{

console.log(res)

/*

[

{

_id: 5e6f5ead75428112e5cc9c40,

username: ‘张三’,

age: 18,

address: ‘人民公园’

},

{

_id: 5e6f5ead75428112e5cc9c44,

username: ‘诸葛亮’,

age: 19,

address: ‘宁夏’

}

]

*/

// 7.关闭链接

client.close()

})

} else {

console.log(‘库连接失败…’, err)

}

})

express+mongodb

  • 数据库中的内容

在这里插入图片描述

//安装引入 express mongodb

const express = require(‘express’)

const mongodb = require(‘mongodb’)

// 创建服务器

app = express()

app.listen(3000)

// 创建端口

app.get(‘/api/user’, (req, res) => {

let { _page, _limit } = req.query //解构赋值

// 相当于

// let _page=req.query._page

// let _limit=req.query._limit

// console.log(typeof _page,typeof _limit)// string string 需要数字类型

// 创造实例

let mongoCt = mongodb.MongoClient

//连接

mongoCt.connect(‘mongodb://127.0.0.1:27017’, { useUnifiedTopology: true },(err, client) => {

if (!err) {

// 链接库

let db = client.db(‘student’)

// 链接集合

let user = db.collection(‘user’)

user.find({}, {

//_page 页数 _limit 一页有多少条内容

skip: (_page - 1) * _limit-0, //隐式转换 将字符串转换为 数字

limit: _limit-0,

}).toArray((err, result) => {

res.send({

err:0,

data:result

})

})

} else {

res.send(‘库连接失败…’, err)

}

})

})

  • 利用postman测试接口

在这里插入图片描述

mongodb的封装

=====================================================================

封装mongodb连接库操作

  • 封装

//引入 mongodb

const mongodb=require(‘mongodb’)

//实例

let mongoCt=mongodb.MongoClient

//输出

//函数参数的解构 与 函数参数的默认值的赋值

module.exports=({dbName=‘student’,collectionName,success,error,url=‘mongodb://127.0.0.1:27017’})=>{

//连接

mongoCt.connect(url, { useUnifiedTopology: true },(err, client) => {

if (!err) {

// 链接库

let db = client.db(dbName)

// 链接集合

let collection = db.collection(collectionName)

// if(success) success(user,client)

success && success(collection,client) //短路 与上一行代码相同

} else {

error && error(err) //短路

}

})

}

  • 引用自定义模块

//安装引入 express mongodb 自定义模块

const express = require(‘express’)

const mongodb = require(‘./mongodb’)

// 创建服务器

app = express()

app.listen(3000)

// 创建端口

app.get(‘/api/user’, (req, res) => {

let { _page, _limit } = req.query //解构赋值

// 相当于

// let _page=req.query._page

// let _limit=req.query._limit

// console.log(typeof _page,typeof _limit)// string string 需要数字类型

mongodb({

collectionName: ‘user’,

success: (collection, client) => {

collection.find({}, {

//_page 页数 _limit 一页有多少条内容

skip: (_page - 1) * _limit - 0, //隐式转换 将字符串转换为 数字

limit: _limit - 0,

sort:{age:1,_id:-1} //排序

}).toArray((err, result) => {

res.send({

err: 0,

data: result

})

// 关闭库

client.close()

})

},

error: err => {

res.send(‘库连接失败…’, err)

}

})

})

  • 测试

在这里插入图片描述

利用 Promise 封装mongodb连接库操作

  • 封装

//引入 mongodb

const mongodb = require(‘mongodb’)

//实例

let mongoCt = mongodb.MongoClient

//函数参数的解构 与 函数参数的默认值的赋值

let open = ({ dbName = ‘student’, collectionName, success, error, url = ‘mongodb://127.0.0.1:27017’ }) => {

return new Promise((resolve, reject) => {

mongoCt.connect(url, { useUnifiedTopology: true }, (err, client) => {

if (!err) {

// 链接库

let db = client.db(dbName)

// 链接集合

let collection = db.collection(collectionName)

resolve({collection, client})

} else {

reject(err)

}

})

})

}

//输出

exports.open=open

  • 引用自定义模块

//安装引入 express mongodb

const express = require(‘express’)

const mongodb = require(‘./mongodb’)

// 创建服务器

app = express()

app.listen(3000)

// 创建端口

app.get(‘/api/user’, (req, res) => {

let { _page, _limit } = req.query //解构赋值

// 相当于

// let _page=req.query._page

// let _limit=req.query._limit

// console.log(typeof _page,typeof _limit)// string string 需要数字类型

mongodb.open({

collectionName: ‘user’

}).then(({collection, client}) => {

collection.find({}, {

//_page 页数 _limit 一页有多少条内容

skip: (_page - 1) * _limit - 0, //隐式转换 将字符串转换为 数字

limit: _limit - 0,

sort: { age: 1, _id: -1 } //排序

}).toArray((err, result) => {

res.send({

err: 0,

data: result

})

// 关闭库

client.close()

})

}).catch((err) => {

res.send(‘连接库失败…’, err)

})

})

  • 测试

在这里插入图片描述

封装mongodb查询数据,分页,根据动态Id查看详情操作

  • 封装

let mongodb = require(“mongodb”)

let mongodCt = mongodb.MongoClient

let ObjectId = mongodb.ObjectId //把字符串转成ObjectId的对象类型 mongodb数据库中id是objectId

//链接库

/*

dbName:数据库名称 默认值就是student

collectionName:集合名字

url:链接的url地址

*/

let open = ({dbName=‘student’,collectionName,url=“mongodb://127.0.0.1:27017”})=>{

return new Promise((resolve,reject)=>{

mongodCt.connect(url,{useUnifiedTopology: true},(err,client)=>{

if(err){

reject(err)

}else{

let db = client.db(dbName)

let collection = db.collection(collectionName)

resolve({collection,client})

}

})

})

}

//查询库集合列表数据

let findList = ({

collectionName,//集合名字

dbName=‘student’,//默认指明的数据库的名字

_page,_limit,_sort,q

})=>{

//生成检索条件

let rule = q ? {username:new RegExp(q,‘g’)} : {} //张三 张三丰

// let rule = q ? {username:eval(‘/’+q+“/”)} : {}

return new Promise((resolve,reject)=>{

//链接数据库

open({dbName,collectionName})

.then(({collection,client})=>{

//查询列表

collection.find(rule,{

skip:_page*_limit,//跳过多少条数据

limit:_limit,//限定每一页的数量

sort:{[_sort]:1} //排序字段_sort 当一个变量作为key使用的时候,需要采用[]的语法

}).toArray((err,result)=>{

if(!err && result.length>0){

resolve({err:0,data:result})

}else{

resolve({err:1,msg:“查无数据…”})

}

//关闭资源

client.close()

})

})

.catch(err=>{ //链接数据库失败

reject({err:1,msg:“数据库链接失败…”})

})

})

}

//根据动态id获取详情数据

let findDetail = ({

dbName=“student”,//默认查询的数据库名字

collectionName,//集合名字

_id=null //外面传入的_id

})=>{

return new Promise((resolve,reject)=>{

//链库操作

open({dbName,collectionName})

.then(({collection,client})=>{

//查询

if(_id.length === 24){

collection.find({_id:ObjectId(_id)}).toArray((err,data)=>{

//返回结果

if(!err && data.length>0){

resolve({err:0,data:data[0]}) //因为result是一个数组,里面仅仅包含一条数据

}else{

resolve({err:1,msg:“查询不到数据…”})

}

})

}else{

reject({err:1,msg:“id长度有误…”})

}

})

.catch(err=>reject({err:1,msg:“链接数据库失败…”}))

})

}

exports.open = open; //{open:函数}

exports.findList = findList;

exports.findDetail = findDetail;

  • 引入自定义模块

//1.引入mongodb客户端包

// const mongodb = require(“mongodb”)

const express = require(“express”)

let app = express()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前15.PNG

前16.PNG

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处获取

…"}))

})

}

exports.open = open; //{open:函数}

exports.findList = findList;

exports.findDetail = findDetail;

  • 引入自定义模块

//1.引入mongodb客户端包

// const mongodb = require(“mongodb”)

const express = require(“express”)

let app = express()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-bWxD86AT-1712948190505)]

[外链图片转存中…(img-FGzvUm9W-1712948190505)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-tAI2x0yu-1712948190505)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

[外链图片转存中…(img-sRkSrRGB-1712948190506)]

[外链图片转存中…(img-xeT45FOP-1712948190506)]

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处获取

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值