導(dǎo)讀:
- 如果你是剛接觸 MongoDB 的小伙伴绒窑,這篇文章會(huì)讓你少走很多改Bug之路些膨!現(xiàn)在項(xiàng)目中一般直接使用
npm i mongodb --save
订雾,這樣默認(rèn)安裝是最新 3.x 版本的洼哎,這都不是重點(diǎn)噩峦,重點(diǎn)是 MongoDB2.x 和 MongoDB3.x 的很多方法都不一樣族淮!
例子:
這里只介紹 Node.js 對(duì) MongoDb3.x 版本的增刪改查:
// 聲明首先少不了祝辣,如果不知道 app 的引入模塊蝙斜,請(qǐng)看上文(封裝 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/'
// 數(shù)據(jù)庫(kù)中增加數(shù)據(jù)
app.get('/add', (req, res) => {
MongoClient.connect(DBurl, { useNewUrlParser: true }, (err, client) => {
if(err) throw err
let db = client.db('verin') // 數(shù)據(jù)庫(kù)名
db.collection('user').insertOne({
"name": "Node.js",
"age": 10
}, (err, result) => {
if(err) throw err
})
res.send('增加數(shù)據(jù)成功')
client.close()
})
})
// 數(shù)據(jù)庫(kù)中刪除數(shù)據(jù) deleteOne / deleteMany
app.get('/delete', (req, res) => {
MongoClient.connect(DBurl, { useNewUrlParser: true }, (err, client) => {
if(err) throw err
let db = client.db('verin') // 數(shù)據(jù)庫(kù)名
db.collection('user').deleteOne({
"name": "Node.js",
}, (err, result) => {
if(err) throw err
})
res.send('刪除數(shù)據(jù)成功')
client.close()
})
})
// 數(shù)據(jù)庫(kù)中修改數(shù)據(jù)
app.get('/delete', (req, res) => {
MongoClient.connect(DBurl, { useNewUrlParser: true }, (err, client) => {
if(err) throw err
let db = client.db('verin') // 數(shù)據(jù)庫(kù)名
db.collection('user').updateOne({
"name": "Node.js"
}, {
$set: { "age": 20 }
}, (err, result) => {
if(err) throw err
})
res.send('修改數(shù)據(jù)成功')
client.close()
})
})
// 數(shù)據(jù)庫(kù)中查詢數(shù)據(jù) ( 這個(gè)是真把博主搞蒙蔽了滤馍,但還是想不通forEach為啥不行 )
app.get('/delete', (req, res) => {
MongoClient.connect(DBurl, { useNewUrlParser: true }, (err, client) => {
if(err) throw err
let db = client.db('verin') // 數(shù)據(jù)庫(kù)名
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版本的時(shí)候是使用 each(callback) 查詢數(shù)據(jù),然后 3.x版本說(shuō) each 被淘汰了阁苞,要改用 forEach(callback),行我用 forEach 為什么不行骚灸?見下面例子
官方文檔:https://docs.mongodb.com/manual/reference/method/cursor.forEach/#cursor.forEach
// 數(shù)據(jù)庫(kù)中查詢數(shù)據(jù) ( 這個(gè)是真把博主搞蒙蔽了甚牲,但還是想不通forEach為啥不行 )
app.get('/delete', (req, res) => {
MongoClient.connect(DBurl, { useNewUrlParser: true }, (err, client) => {
if(err) throw err
let db = client.db('verin') // 數(shù)據(jù)庫(kù)名
let result = db.collection('user').find({})
let list = []
result.forEach((doc) => {
if( doc !=null ) {
list.push(doc)
console.log(list) // 只打印出第一條數(shù)據(jù),蒙蔽……
} else {
console.log(list) // 根本不執(zhí)行 else 里的代碼
ejs.renderFile('./index.ejs', { list: list }, (err, data) => {
res.send(data)
})
})
}
client.close()
})
})
總結(jié):
- 這東西就是熟能生巧,多用就會(huì)了星岗,剛開始難免會(huì)有些懵的地方栋盹,如果有小伙伴能解決博主的疑問(wèn)例获,歡迎評(píng)論榨汤!