node.js 实战——mongoDB 续一
mongoDB的基本指令
进入mongodb
mongo
显示当前的所有数据库
show dbs
# 或者
show databases
切换数据库/进入指定数据库
使用这个命令的时候,是不要求这个数据库是否创建
use 数据库名
显示当前数据库
db
显示数据库中所有集合
show collections
数据库的CRUD的操作
Create(插入数据)
🔹 单条插入 insertOne()
db.users.insertOne({name: "Alice",age: 25,city: "Shanghai"
})
• 会自动生成 _id 字段,保证主键唯一性。
• 如果你自己指定 _id,需要保证它的唯一,否则插入会失败。
🔹 多条插入 insertMany()
db.users.insertMany([{ name: "Bob", age: 30, city: "Beijing" },{ name: "Charlie", age: 28, city: "Guangzhou" }
])
• insertMany 支持同时批量插入多条数据。
• 默认遇到插入错误会停止,可以设置 {ordered: false} 忽略错误继续。
比如:
db.users.insertMany([...], { ordered: false })
Read(查询数据)
🔹 查询单条数据 findOne()
db.users.findOne({ name: "Alice" })
• 返回第一个匹配的文档。
• 如果没有匹配,会返回 null。
🔹 查询多条数据 find()
db.users.find({ age: { $gte: 25 } })
• $gte 表示 “greater than or equal”(大于等于)。
• find() 返回一个游标(Cursor),可以链式继续操作(比如 .limit(), .sort())。
常见查询符号:
符号 | 说明 |
---|---|
$gt | 大于 |
$lt | 小于 |
$gte | 大于等于 |
$lte | 小于等于 |
$eq | 等于 |
$ne | 不等于 |
$in | 包含于数组内 |
$nin | 不包含于数组内 |
例子,查找城市在 “Beijing” 或 “Shanghai” 的人:
db.users.find({ city: { $in: ["Beijing", "Shanghai"] } })
🔹 查询时只要部分字段(Projection)
db.users.find({ age: { $gte: 25 } },{ name: 1, city: 1, _id: 0 }
)
• 1 表示要返回,0 表示不返回。
• 默认 _id 是返回的,要特别用 _id: 0 才能不返回。
🔹 排序 sort()
按年龄升序排列:
db.users.find().sort({ age: 1 })
按年龄降序排列:
db.users.find().sort({ age: -1 })
🔹 分页 skip() + limit()
比如分页查询,第2页,每页10条:
db.users.find().skip(10).limit(10)
Update(更新数据)
🔹 更新单条数据 updateOne()
db.users.updateOne({ name: "Alice" },{ $set: { age: 26 } }
)
• $set 更新指定字段。
• 如果匹配到多个,只更新第一条。
🔹 更新多条数据 updateMany()
db.users.updateMany({ city: "Shanghai" },{ $set: { city: "SH" } }
)
• 更新所有符合条件的文档。
🔹 upsert(如果没有就插入)
upsert: true 意味着 “找不到就插入”:
db.users.updateOne({ name: "David" },{ $set: { age: 22, city: "Wuhan" } },{ upsert: true }
)
🔹 更新字段数组 push/addToSet
往数组字段加元素:
db.users.updateOne({ name: "Alice" },{ $push: { hobbies: "reading" } }
)
避免重复添加元素,用 $addToSet:
db.users.updateOne({ name: "Alice" },{ $addToSet: { hobbies: "music" } }
)
Delete(删除数据)
🔹 删除单条数据 deleteOne()
db.users.deleteOne({ name: "Charlie" })
• 只删除第一条匹配到的数据。
🔹 删除多条数据 deleteMany()
db.users.deleteMany({ age: { $lt: 25 } })
• 删除所有符合条件的记录。
📌 特别注意事项
• MongoDB 默认是弱事务(非强一致性),要谨慎考虑事务问题(尤其是金融类应用)。
• 大批量更新/删除建议加限制条件,防止误操作导致全表数据被删。
• 开发时可以用 MongoDB Compass 或 Robo 3T(图形界面工具),更直观看数据。
🚀 补充:一个完整的小例子
// 插入新用户
db.users.insertOne({ name: "Tom", age: 20, hobbies: ["basketball"] })// 查找Tom
db.users.findOne({ name: "Tom" })// 更新Tom的年龄
db.users.updateOne({ name: "Tom" }, { $set: { age: 21 } })// 给Tom增加一个爱好
db.users.updateOne({ name: "Tom" }, { $addToSet: { hobbies: "reading" } })// 删除年龄小于18岁的用户
db.users.deleteMany({ age: { $lt: 18 } })
Mongoose
Mongoose是一个对象文档模型库, 是在node.js 中方便使用代码操作mongodb数据库
安装
npm i mongoose
导入mongoose
const mongoose = require('mongoose');
链接数据库
mongoose.connect("mongodb://localhost:27017/test",
)
设置回调
mongoose.connection.once("open", ()=>{})mongoose.connection.on("error", (err)=>{})mongoose.connection.on("close", ()=>{})