node + mongodb客户端
安装+引入
npm install mongodb -S
var mysql = require('mongodb');
实例化并连接
let mongoCt = mongodb.MongoClient;
mongoCt.connect('协议://地址:端口',回调(err,client)) //err 错误 client链接后的客户端
链接库和集合
let db = client.db('库名')
let user = db.collection('集合名');
集合操作
//user.API() 集合操作 返回 对象
//增
insertOne(对象数据,(err,res)=>{}) //res = 对象
insertMany(arr数据,(err,res)=>{}) //res = 对象
//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()
具体操作代码:
// 1.引入mongodb客户端包
const mongodb = require("mongodb")
// 2.实例化
const mongoCt = mongodb.MongoClient; //创建实例化
// 3.链接mongodb
mongoCt.connect('mongodb://127.0.0.1"27017',{ useUnifiedTopology: true } ,(err,client)=>{
console.log(err);
console.log(client);
if(!err){ //err 错误 client链接后的客户端
//4. 链接库
let db = client.db("student")
//5.链接集合user
let user = db.collection("user")
// 6. 操作集合
// 插入一条数据
user.insertOne({username:"李四",agg:28},(err,res)=>{
if(!err){
console.log(res);
}
})
// // 排序与分页
// user.find({},{
// skip:2, //跳过最前面两条数据
// limit:3, //一页提取3条数据
// sort:{age:1,_id:-1} //按照age升序,id降序排序
// }).toArray((err,result)=>{
// console.log(result);
// })
// 插入一条数据
user.insertMany([
{username:"郭靖",agg:22},
{username:"黄蓉",agg:18}
// 7. 关闭库
client.close()
],(err,result)=>{
console.log(result);
})
}else{
console.log("链接失败...",err);
}
})
使用express链接一个mongodb:
// 1.引入mongodb客户端包
const mongodb = require("mongodb")
const express = require("express")
let app = express()
app.listen(3000, () => console.log("server is running..."))
// 创建接口
app.get("/api/user", (req, res, next) => {
// 获取参数
let {_page,_limit} = req.query;
// 2.实例化
const mongoCt = mongodb.MongoClient; //创建实例化
// 3.链接mongodb
mongoCt.connect('mongodb://127.0.0.1"27017', { useUnifiedTopology: true }, (err, client) => {
if (!err) { //err 错误 client链接后的客户端
//4. 链接库
let db = client.db("student")
//5.链接集合user
let user = db.collection("user")
// 6. 操作集合
// 排序与分页
user.find({},{
skip:(_page-1)*_limit-0, //跳过最前面skip条数据
limit:_limit-0, //一页提取limit条数据
sort:{age:1,_id:-1} //按照age升序,id降序排序
}).toArray((err,result)=>{
res.send({
err:0,
data:result
})
})
} else {
console.log("链接失败...", err);
}
})
})
封装一个mongodb:
let mongodb = require("mongodb")
let mongodCt = mongodb.MongoClient
// 函数参数的解构与函数参数的默认值
module.exports = ({dbName,collectionName,success,error,url="mongodb://127.0.0.1:27017"})=>{
mongoCt.connect(uel, { useUnifiedTopology: true }, (err, client) => {
if(err){
if(error) error(err)
}else{
let db = client.db(dbName)
let user = db.collection(collectionName)
if(success) success(user,client)
}
})
}
// let mongodb = require("xxx")
// mongodb({
// dbName:'student',
// collectionName:"user",
// success:(collection,client)=>{
// //collection进行 增删改查 操作...
// // 关闭库
// client.close()
// },
// err:error=>{
// }
// })
使用open方法封装:
let mongodb = require("mongodb")
let mongodCt = mongodb.MongoClient
let ObjectId = mongodb.ObjectId //把字符串转成ObjectId的对象类型
//链接库
/*
dbName:数据库名称 默认值就是student
collectionName:集合名字
url:链接的url地址
*/
let open = ({dbName,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,//默认指明的数据库的名字
_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 - 1,//跳过多少条数据
limit:_limit - 0,//限定每一页的数量
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;
node + mongoose
可视化客户端