记录Node.js+Mongodb数据库一些常用基本操作方法
新增数据
- 语法:db.集合名.save(文档)
- 说明:如果不指定_id字段,save()方法类似于insert()方法。如果指定_id字段,则会更新_id字段的数据
- 示例1:db.student.save({name:"poi", age:22, gender:1,address:"石家庄", isDelete:0})
- 示例2:db.student.save({_id:ObjectId("59950962019723fe2a0d8d17"),name:"poi", age:23, gender:1,address:"石家庄", isDelete:0})
javascript
router.post('/setColor', async function (ctx, next) {
try {
const Color = mongoose.model('Color')
let newColor = new Color({ colorValue: ctx.request.body.colorValue })
await newColor.save().then(() => {
ctx.body = {
code: 200,
message: '颜色值设置成功'
}
})
} catch (error) {
ctx.body = { code: 500, message: error }
}
});
删除数据
remove()方法已经过时了,现在官方推荐使用deleteOne()和deleteMany()方法。
deleteMany参数为{}时候删除全部
javascript
await Color.deleteMany({})
删除指定数据
javascript
db.inventory.deleteMany({ status : "A" })
数据查询
查询可能是我们用的最多的,通常有find、findOne、findById(参数是数据库默认生成的_id)
- findOne({ name: ”张三” })查询,返回的只会是第一个张三
- find({ name: ”张三” })查询的话,就会返回所有张三了
javascript
router.get('/getColor', async function (ctx, next) {
try {
const Color = mongoose.model('Color')
await Color.find({}, function (err, res) { // {}为查询所有
ctx.body = {
code: 200,
data: res
}
}).sort({_id:-1}); // 根据_id字段进行倒叙返回,默认1
} catch (error) {
ctx.body = { code: 500, message: error }
}
});
数据更新
常用的有update、findByIdAndUpdate(参数是数据库默认生成的_id)
- 参数说明:
- query:update的查询条件,类似于sql里update语句内where后面的内容
- update:update的对象和一些更新的操作符($set,$inc)等,$set直接更新,$inc在原有的基础上累加后更新
- upset:可选,如果不存在update的记录,是否当新数据插入,true为插入,False为不插入,默认为false
- multi:可选,mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就按照条件查找出来的数据全部更新
javascript
await User.update({userName:'小名同学'},{userName:'QQ糖果'},function(err, res){
console.log('更新数据,欧耶',err,res)
});
javascript
await User.findByIdAndUpdate('5d2da91b76accfce15fdfbfe', {userName:'修改id为5d2dxxxx的数据属性userName'}, function(err, res) {
if (err) {
console.log(err);
} else {
console.log(res);
}
});
查询条件操作符
作用:条件操作符用于比较两个表达式并从Mongodb集合中获取数据
大于 - $gt
javascript
语法:db.集合名.find({<key>:{$gt:<value>}})
示例:db.student.find({age:{$gt:20}})
大于等于 - $gte
javascript
语法:db.集合名.find({<key>:{$gte:<value>}})
小于 - $lt
javascript
语法:db.集合名.find({<key>:{$lt:<value>}})
小于等于 - $lte
javascript
语法:db.集合名.find({<key>:{$lte:<value>}})
大于等于 和 小于等于 - $gte 和 $lte
javascript
语法:db.集合名.find({<key>:{$gte:<value>,$lte:<value>}})
等于 - :
javascript
语法:db.集合名.find({<key>:<value>})
使用_id进行查询
javascript
语法:db.student.find({"_id":ObjectId("id值")})
示例:db.student.find({"_id":ObjectId("5995084b019723fe2a0d8d14")})
查询某个结果集的数据条数
javascript
db.student.find().count()
查询某个字段的值当中是否包含另一个值
javascript
示例:db.student.find({name:/ile/})
查询某个字段的值是否以另一个值开头
javascript
示例:db.student.find({name:/^li/})
limit、skip
- limit():读取指定数量的数据记录,db.student.find().limit(3)
- skip():跳过指定数量的数据,db.student.find().skip(3)
- skip与limit联合使用,通常用这种方式来实现分页功能,示例:db.student.find().skip(3).limit(3)
数据排序
- 语法:db.集合名.find().sort({:1|-1})
- 示例:db.student.find().sort({age:1})
- 注意:1表示升序,-1表示降序(如果用参数_id,最新的在最前面)
关联查询
可以了解下:$lookup,aggregate
小结
node最大的优势就是和js完美无缝对接,通过js对数据的操作也能达到一些我们想要的目的,这点很棒。