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()
    })
})

總結:

  • 這東西就是熟能生巧,多用就會了,剛開始難免會有些懵的地方,如果有小伙伴能解決博主的疑問,歡迎評論!
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容