node通过 驱动 和 mongoose插件 操作Mongodb

目录

一. 通过驱动操作数据库

1. 建库建集合

2. 插入数据

3. 查询数据   并把数据写入文件 && 数据响应给页面 

4. 更新数据

5. 删除数据

6. 排序和分页

7. 删除集合

8. 实现左连接

9. Promise 建库建表

10. Promise 增删改查

11. 用异步函数实现增删改查

二. 通过mongoose插件操作数据库

1. 增删改查

一. 通过驱动操作数据库

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);
// })


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值