導讀:
- 如果你是剛接觸 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()
})
})
總結:
- 這東西就是熟能生巧,多用就會了,剛開始難免會有些懵的地方,如果有小伙伴能解決博主的疑問,歡迎評論!