目录
一. 通过驱动操作数据库
1. 建库建集合
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
// console.log("数据库已创建!");
var dbase = db.db("runoob"); // 创建的数据库名【runoob】
dbase.createCollection('site',function( err, res){ //创建【site】集合||表
if(err) throw err;
console.log('创建集合');
db.close();
})
});
2. 插入数据
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
// console.log("数据库已创建!");
var dbase = db.db("runoob"); // 创建的数据库名【runoob】
// 插入一条数据
// var myobj = { name: "菜鸟教程1", url: "www.runoob" }; // 要插入的数据
// dbase.collection('site').insertOne(myobj, function(err, res){
// if(err) throw err;
// console.log('文档插入成功');
// db.close()
// })
//插入多条数据
var myobj2 = [
{ name: '小一', age: '14', type: 'cn'},
{ name: '小二', age: '18', type: 'en'},
{ name: '小三', age: '17', type: 'en'},
{ name: '小四', age: '24', type: 'en'},
{ name: '小五', age: '20', type: 'en'},
];
dbase.collection("site").insertMany(myobj2, (err, res)=>{
if(err) throw err
console.log("插入的文档数量为:"+ res.insertedCount);
db.close();
})
});
3. 查询数据 并把数据写入文件 && 数据响应给页面
const express = require('express')
const app = express()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
let fs = require('fs')
var hh // 字符串类型
// 定义局部生效的中间件
const mw1 = (req, res, next)=>{
MongoClient.connect(url, function(err, db) {
if (err) throw err;
// console.log("数据库已创建!");
var dbase = db.db("runoob"); // 创建的数据库名【runoob】
dbase.collection("site").find().toArray((err, result)=>{
if(err) throw err
// 调用 a() 方法,把result赋值给全局变量 arr
a(JSON.stringify(result))
res.send(JSON.stringify(result))
db.close();
})
});
}
function a(aa){
hh = aa;
// console.log("bbb"+hh);
// 写入文件
fs.writeFile('../查询的数据.json',hh,(err)=>{
if(err) console.log(err);
console.log("文件创建成功");
})
}
// 创建路由
app.get('/',mw1,(req) => {
res.send('我是路由')
})
//配置端口
app.listen(80, ()=>{
console.log("端口号为:http://127.0.0.1");
})
4. 更新数据
const express = require('express')
const app = express()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
// 定义局部生效的中间件
const mw1 = (req, res, next)=>{
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbase = db.db("runoob"); // 创建的数据库名【runoob】
var whereStr = {"type":'cn'} // 查询的条件
var updateStr = {$set:{'age':'10'}} // 修改成这个
// 更新一条数据
// dbase.collection("site").updateOne(whereStr,updateStr,(err, result)=>{
// if(err) throw err
// console.log("文档更新成功");
// db.close();
// })
// 更新多条数据
dbase.collection("site").updateMany(whereStr,updateStr,(err, res)=>{
if(err) return err;
console.log(res.result.nModified+"条数据被更新");
db.close();
})
});
}
// 创建路由
app.get('/',mw1,(req, res) => {
res.send('我是路由')
})
//配置端口
app.listen(80, ()=>{
console.log("端口号为:http://127.0.0.1");
})
5. 删除数据
const express = require('express')
const app = express()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
// 定义局部生效的中间件
const mw1 = (req, res, next)=>{
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbase = db.db("runoob"); // 创建的数据库名【runoob】
var whereStr = {"url":'https://www.google.com'} // 删除的条件
// 删除一条数据
// dbase.collection("site").deleteOne(whereStr,(err, result)=>{
// if(err) throw err
// console.log("文档删除成功");
// db.close();
// })
// 删除多条数据
dbase.collection("site").deleteMany(whereStr,(err, result)=>{
if(err) throw err
console.log(result.result.n+" 条文档被删除");
db.close();
})
});
}
// 创建路由
app.get('/',mw1,(req, res) => {
res.send('我是路由')
})
//配置端口
app.listen(80, ()=>{
console.log("端口号为:http://127.0.0.1");
})
6. 排序和分页
const express = require('express')
const app = express()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
// 定义局部生效的中间件【排序】
const mw1 = (req, res, next)=>{
MongoClient.connect(url, function(err, db) {
if(err) throw err;
var dbase = db.db("runoob"); // 创建的数据库名【runoob】
var mysort = {age: 1}
dbase.collection('site').find().sort(mysort).toArray((err, result)=>{
if(err) throw err;
console.log(result);
res.send(JSON.stringify(result))
db.close();
})
});
}
// 定义局部生效的中间件【分页】
const mw2 = (req, res, next)=>{
MongoClient.connect(url, function(err, db){
if(err) throw err;
var dbase = db.db("runoob");
dbase.collection('site').find().skip(2).limit(2).toArray((err, result)=>{
if(err) throw err;
console.log(result);
res.send(JSON.stringify(result))
db.close();
})
})
}
// 创建路由
app.get('/',mw1,(req, res) => {
res.send('我是路由,用来控制排序的')
})
app.get('/fengye',mw2,(req, res) => {
res.send('我是路由,用来控制分页的')
})
//配置端口
app.listen(80, ()=>{
console.log("端口号为:http://127.0.0.1");
})
7. 删除集合
const express = require('express')
const app = express()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
// 定义局部生效的中间件【排序】
const mw1 = (req, res, next)=>{
MongoClient.connect(url, function(err, db) {
if(err) throw err;
var articledb = db.db("articledb") //要删除的数据库
articledb.collection('cats').drop((err, result)=>{
// 执行成功 result 返回true,失败返回 false
if(err) throw err;
if(result) console.log("集合已删除");
db.close();
})
});
}
// 创建路由
app.get('/',mw1,(req, res) => {
res.send('我是路由,用来控制排序的')
})
//配置端口
app.listen(80, ()=>{
console.log("端口号为:http://127.0.0.1");
})
8. 实现左连接
const express = require('express')
const app = express()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
// 定义局部生效的中间件【排序】
const mw1 = (req, res, next)=>{
MongoClient.connect(url, function(err, db) {
if(err) throw err;
var dbase = db.db("runoob");
dbase.collection('site').aggregate([
{$lookup: // 作用:查询出左表所有的数据,和右表中 和左表字段里字段值相同的数据
{
from: 'pink', // 第二个表名 右集合
localField: 'name', // 左集合 join 字段
foreignField: 'name', // 右集合 join 字段
as: 'abc' // 新生成一表格,表名自定义(类型 array)
}
}
]).toArray((err, res)=>{
if(err) throw err;
console.log(JSON.stringify(res));
db.close();
})
});
}
// 创建路由
app.get('/',mw1,(req, res) => {
res.send('我是路由,用来控制排序的')
})
//配置端口
app.listen(80, ()=>{
console.log("端口号为:http://127.0.0.1");
})
9. Promise 建库建表
const express = require('express')
const app = express()
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
// 定义局部生效的中间件【排序】
const mw1 = (req, res, next)=>{
// 使用回调方法来建表
// MongoClient.connect(url, function(err, db) {
// if(err) throw err;
// console.log("数据库创建成功");
// var dbase = db.db("runoob");
// dbase.createCollection('site', function(err, res){
// if (err) throw err;
// console.log("创建集合!");
// db.close();
// })
// });
// 使用 Promise 创建数据库和集合
MongoClient.connect(url).then((conn)=>{
console.log("数据库已连接");
var dbase = conn.db("School");
dbase.createCollection('student').then((res)=>{
console.log("已创建集合");
}).catch((err)=>{
console.log("数据库操作错误");
}).finally(()=>{
conn.close();
});
}).catch((err)=>{
console.log("数据库连接失败");
})
}
// 创建路由
app.get('/',mw1,(req, res) => {
res.send('我是路由,用来控制排序的')
})
//配置端口
app.listen(80, ()=>{
console.log("端口号为:http://127.0.0.1");
})
10. Promise 增删改查
const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://127.0.0.1/"
MongoClient.connect(url).then((conn)=>{
console.log("数据库已连接");
const dbase = conn.db("School").collection("test");
var a = [
{ name: '宋一', age: '10', address: '湖南'},
{ name: '宋二', age: '20', address: '长沙'},
{ name: '宋二', age: '30', address: '深圳'},
]
// 增加
dbase.insertMany(a).then((res) => {
//查询增加后的数据
return dbase.find({name:"宋一"},{_id:0,name:0}).toArray().then((arr)=>{
console.log("增加后的条件查询",arr);
})
}).then(()=>{
//更改
return dbase.updateMany({name:"宋二"},{$set:{address:"上海"}})
}).then(()=>{
// 查询更改后的数据
return dbase.find().toArray().then((arr)=>{
console.log("更改后的查询",arr);
})
}).then(()=>{
//删除
console.log("删除成功");
return dbase.deleteMany({});
}).then((res)=>{
// 查询删除后的数据
return dbase.find().toArray().then((arr)=>{
console.log(arr);
})
}).catch((err)=>{
console.log("数据操作失败"+ err.message);
}).finally(()=>{
conn.close()
})
}).catch((err)=>{
console.log("数据库连接失败");
});
11. 用异步函数实现增删改查
const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://localhost/"
async function dataOperate(){
var conn = null;
try{
conn = await MongoClient.connect(url);
console.log("数据库已连接");
const test = conn.db("School").collection("test");
// 增加
await test.insertOne({ "site": "runoob.com" });
// 查询
var arr = await test.find().toArray();
console.log("增加",arr);
// 更改
await test.updateMany({ "site": "runoob.com" },{ $set: { "site": "example.com" }});
// 查询
arr = await test.find().toArray();
console.log("更改",arr);
// 删除
await test.deleteMany({ "site": "example.com" });
// 查询
arr = await test.find().toArray();
console.log(arr);
}catch (err) {
console.log("错误:" + err.message);
} finally {
if (conn != null) conn.close();
}
}
dataOperate()
二. 通过mongoose插件操作数据库
1. 增删改查
// 一:安装并 加载 mongoose模块
const mongoose = require('mongoose');
// 二:链接本地Mongodb 数据库(School)
mongoose.connect('mongodb://localhost:27017/School',(err)=>{
if(!err) console.log("连接成功");
else throw err;
});
// 三:定义mongoose表结构
var Schema = new mongoose.Schema({
name: String,
age: Number,
createAt: {
type: Date, // 类型。
required:true, // 不能为空
default:Date.now // 默认。Date.now表示当前插入的时间,加了括号后表示当前调用时间
}
},{collecation:'p'}); // ,{collecation:'tablep'}给表命名,基本上不使用,
// 四:创建 model模型 // "mongoose" 这个也是给表命名 经常用的
const studentModel = mongoose.model("mongoose",Schema)
// 五:导出模块
module.exports = studentModel
// -----------------------------------------------------------------------
// 引入模块
const studentModel = require('studentModel')
// 增加数据
// studentModel.create({name:"songwenjun", age:2}).then(r=>{
// console.log(r);
// })
// 查询数据
// studentModel.findById("62971ca7dafabb411b31d273").then(r=>{
// console.log(r);
// })
// 更改数据
// studentModel.updateOne({_id:"62971dd876ffd3a3737c865d"},{name:"干得漂亮"}).then(r=>{
// console.log(r);
// })
// 删除数据
// studentModel.deleteOne({age:1}).then(r=>{
// console.log(r);
// })