Node.js - 操作MongoDB的那些坑!

导读:

  • 如果你是刚接触 MongoDB 的小伙伴,这篇文章会让你少走很多改Bug之路!现在项目中一般直接使用 npm i mongodb --save ,这样默认安装是最新 3.x 版本的,这都不是重点,重点是 MongoDB2.x 和 MongoDB3.x 的很多方法都不一样!

例子:

这里只介绍 Node.js 对 MongoDb3.x 版本的增删改查:

//  声明首先少不了,如果不知道 app 的引入模块,请看上文(封装 Express路由 )
const http = require('http')
const ejs = require('ejs')
const app = require('./express_route.js')
const MongoClient = require('mongodb').MongoClient
const DBurl = 'mongodb://localhost:27017/'

// 数据库中增加数据   
app.get('/add', (req, res) => {
    MongoClient.connect(DBurl,  { useNewUrlParser: true }, (err, client) => {
        if(err) throw err
        let db = client.db('verin')    //  数据库名
        
        db.collection('user').insertOne({
            "name": "Node.js",
            "age": 10
        }, (err, result) => {
            if(err) throw err
        })

        res.send('增加数据成功')
        client.close()
    })
})

// 数据库中删除数据    deleteOne / deleteMany
app.get('/delete', (req, res) => {
    MongoClient.connect(DBurl,  { useNewUrlParser: true }, (err, client) => {
        if(err) throw err
        let db = client.db('verin')    //  数据库名
        
        db.collection('user').deleteOne({
            "name": "Node.js",
        }, (err, result) => {
            if(err) throw err
        })

        res.send('删除数据成功')
        client.close()
    })
})

// 数据库中修改数据   
app.get('/delete', (req, res) => {
    MongoClient.connect(DBurl,  { useNewUrlParser: true }, (err, client) => {
        if(err) throw err
        let db = client.db('verin')    //  数据库名
        
        db.collection('user').updateOne({
            "name": "Node.js"
        }, {
            $set: { "age": 20 }
        }, (err, result) => {
            if(err) throw err
        })

        res.send('修改数据成功')
        client.close()
    })
})

// 数据库中查询数据     ( 这个是真把博主搞蒙蔽了,但还是想不通forEach为啥不行 )
app.get('/delete', (req, res) => {
    MongoClient.connect(DBurl,  { useNewUrlParser: true }, (err, client) => {
        if(err) throw err
        let db = client.db('verin')    //  数据库名
        
        let result = db.collection('user').find({})
            
        result.toArray((err, list) => {
            ejs.renderFile('./index.ejs', { list: list }, (err, data) => {
                res.send(data)
            })
        })

        client.close()
    })
})

最开始 2.x版本的时候是使用 each(callback) 查询数据,然后 3.x版本说 each 被淘汰了,要改用 forEach(callback),行我用 forEach 为什么不行?见下面例子
官方文档:https://docs.mongodb.com/manual/reference/method/cursor.forEach/#cursor.forEach

// 数据库中查询数据     ( 这个是真把博主搞蒙蔽了,但还是想不通forEach为啥不行 )
app.get('/delete', (req, res) => {
    MongoClient.connect(DBurl,  { useNewUrlParser: true }, (err, client) => {
        if(err) throw err
        let db = client.db('verin')    //  数据库名
        
        let result = db.collection('user').find({})
        let list = []
            
        result.forEach((doc) => {
            if( doc !=null ) {
                list.push(doc)
                console.log(list)      // 只打印出第一条数据,蒙蔽……
            } else {
                console.log(list)  // 根本不执行 else 里的代码
                ejs.renderFile('./index.ejs', { list: list }, (err, data) => {
                      res.send(data)
                })
            })
        }
            
        client.close()
    })
})

总结:

  • 这东西就是熟能生巧,多用就会了,刚开始难免会有些懵的地方,如果有小伙伴能解决博主的疑问,欢迎评论!

你可能感兴趣的:(Node.js - 操作MongoDB的那些坑!)