导读:
- 如果你是刚接触 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()
})
})
总结:
- 这东西就是熟能生巧,多用就会了,刚开始难免会有些懵的地方,如果有小伙伴能解决博主的疑问,欢迎评论!