Node.js 操作 MongoDB
MongoDB v4.1& node.js 文档: https://docs.mongodb.com/drivers/node/current/quick-start
一、使用 npm 安装 MongoDB
npm install mongodb --save-dev
二、导入MongoDB
import { MongoClient } from 'mongodb'
三、node.js 连接 MongoDB 数据库
前提条件:打开cmd
命令窗口,启动MongoDB
数据库服务端
mongod --dbpath 数据库目录路径
1.查询
查询单条数据
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>你好,我是首页!</h1>
<h2>数据库查找的学生姓名:<%=name%></h2>
</body>
</html>
server.js
import http from 'http'
import ejs from 'ejs'
import { app } from './router.js'
import { MongoClient } from 'mongodb' // 第一步,引入 MongoClient
http.createServer(app).listen(3000)
console.log('Server is run at port 3000')
const url = 'mongodb://127.0.0.1:27017'
const client = new MongoClient(url) // 第二步,根据mongodb服务端地址创建 MongoClient 实例
app.get('/', async (req, res) => {
try {
await client.connect() // 第三步,连接数据库
const userDataBase = client.db('user') // 第四步,指定操作的数据库
const studentCollection = userDataBase.collection('student') // 第五步,指定操作的集合/表
const student = await studentCollection.findOne({name: '诸葛亮100'})
ejs.renderFile('./views/index.ejs', {name: student.name}, (err, data) => {
res.send(data)
})
} catch (e) {
// 处理错误
} finally {
await client.close()
}
})
浏览器访问 http://localhost:3000
批量查询
<h1>你好,我是首页!</h1>
<ul>
<% studentList.forEach(c => {%>
<li><%=c.name%></li>
<%})%>
</ul>
// find方法批量查询,返回一个cursor对象,查询number小于等于3的数据,且按number字段降序排序
const cursor = studentCollection.find({number: { $lte: 3 }}, {sort: {number: -1}})
// 调用toArray方法转为数组
const studentList = await cursor.toArray()
ejs.renderFile('./views/index.ejs', {studentList}, (err, data) => {
res.send(data)
})
2.新增
新增单条数据
await studentCollection.insertOne({name: '孙悟空', age: 100})
批量新增
await studentCollection.insertMany([{name: '百里守约', age: 11, type: '射手'}, {name: '孙尚香', age: 12, type: '射手'}, {name: '公孙离', age: 13, type: '射手'}])
3.修改
修改单条数据
// upsert选项设置true表示假如没有查询到匹配的数据时,则新增数据
await studentCollection.updateOne({name: '孙悟空'}, {$set: {name: '鲁班七号'}}, {upsert: true})
批量修改
// upsert选项设置true表示假如没有查询到匹配的数据时,则新增数据
await studentCollection.updateMany({name: '孙悟空'}, {$set: {name: '鲁班七号'}}, {upsert: true})
await studentCollection.replaceOne({name: '百里守约'}, {name: '百里玄策', sex: '男', type: '打野'})
替换
4.删除
删除单条数据
const result = await studentCollection.deleteOne({name: '孙尚香'})
if (result.deletedCount === 1) {
console.log('删除成功!')
} else {
console.log('查询不到要删除的数据')
}
批量删除
const result = await studentCollection.deleteMany({name: '孙尚香'})
console.log(result.deletedCount)