MongoDB作为文档型非关系数据库,和Oracle、Mysql等关系型数据库类似,被认为是最像关系型数据库的非关系型数据库。当然,也有不同的地方,比如关系型数据库的‘数据表’,在MongoDB里叫做‘数据集合’,关系型数据库数据表里的每行数据,在MongoDB里是一个个的数据文档,也因此MongoDB被称为文档型数据库。以下是在日常代码过程中用到的 MongoDB 常用操作:
首先,以引入 UserModel 为例:
const UserModel = require('../models/user')
模糊查找:
await UserModel.find({ username: { $regex: keyword } })
注: 查找 UserModel 里,username 包含 keyword 的所有文档。
向集合中插入数据:
方法一:
let userEntity = new UserModel({ username, password, telnumber }); let userInfo = await userEntity.save();
注: UserModel 为数据模型, 包含username、 password、 telnumber 三个字段
方法二:
const userInfo = await UserModel.create(newUserInfo);
注: newUserInfo 为对象, 包含 username、 password、 telnumber 三个属性。
更新单个文档:
方法一:
UserModel.udpateOne({ _id: userInfo._id }, { username, telnumber }); //username、telnumber 为新的值
方法二:
await UserModel.findOneAndUpdate({ username: '张三' }, { $set: { telnumber: '1234567890' } });
注: 将张三的手机号更新为:1234567890
批量更新文档:
将用户集合中所有 telnumber 字段为空的文档, telnumber 更新为 '1234567890' :
UserModel.updateMany({ telnumber : '' }, { $set: { telnumber : '1234567890' } })
查询集合中的第一条插入的数据:
UserModel.find({}).limit(1) // 方法一: find({}) UserModel.findOne({}) // 方法二: findOne({})查询第一条数据
查询集合中的最后一条插入的插入数据:
UserModel.find({}).sort({_id: -1}).limit(1) //_id为插入文档时自带的字段,具有时间排序性
删除单个文档:
方法一:
UserModel.findOneAndDelete({ username: '张三' })
方法二:
UserModel.deleteOne({ username: '张三' })
注: 删除用户名为 张三 的文档。
同时删除多个文档:
其中,Tel = ['123', '456', '789']
await UserModel.deleteMany({ Tel })
注: 同时删除 UserModel 里, Tel 为 123, 456, 789 的文档。
计算find({})返回的文档个数:
let result = UserModel.find({}).countDocuments() // .countDocuments() 返回总文档数