Mongodb(文档的分页查询)

552 阅读2分钟

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第7篇文章

文档的分页查询

统计查询

db.collection.count({ <query> }, { <options> })
// query => 查询选择条件
// options => 可选,用于修改计数的额外选项
  1. 统计所有记录数
db.comment.count()
  1. 按条件统计记录数
例:统计userid为1003的记录条数
db.comment.count({ userid: '1003' })

注意:

  • 默认情况下count()方法返回符合条件的全部记录条数

分页列表查询

可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据

  1. 基本语法
db.comment.find().limit(number).skip(number)
  1. 返回指定条数
db.comment.find().limit(3)
  1. skip中的数字参数作为跳过的记录数,前N个不要,默认值为0
db.comment.find().skip(3)

案例:

例:每页2个,第二页开始,跳过前2条数据,接着值显示34条数据
// 第一页
db.comment.find().limit(2)
// 第二页
db.comment.find().limit(2),skip(2)
// 第三页
db.comment.limit(2).skip(4)

排序查询

sort()方法对数据进行排序

  1. 基本语法
db.comment.find().sort({ key: 1 })
// key代表排序的字段名
// 1代表升序,-1代表降序

案例:

例:对userid进行降序排序,并对访问量进行升序排序
db.comment.find().sort({ userid: -1, likenum: 1 })

注意:

  • 当skip(), limit(), sort()在一起执行,执行顺序sort() => skip() => limit()
  • 和书写顺序没关系

文档的更多查询

正则复杂条件查询

Mongodb的模糊查询是通过正则表达式的方式实现的

db.集合.find({ 字段名: /正则表达式/ })
// 正则表达式是js的写法

案例:

例:查询包含“开水”的所有文档
db.comment.find({ content: /开水/ })
例:查询内容为“专家”开头的所有文档
db.comment.find({ content: /^专家/ })

比较查询

<, <=, >, >=, !=这些操作符很常见

< 小于 => 字段名: { $lt: 值}      > 大于 => 字段名: { $gt: 值 } 
<= 小于等于 => 字段名: { $lte: 值 }     >= 大于等于 => 字段名: {$gte: 值}
!= 不等于 => 字段名: { $ne: 值 }
​
例:查找年龄大于20的所有文档
db.user.find({ age: {$gt: NumberInt(20)} })

包含查询

包含查询使用$in操作符,不包含是$nin

例:查询评论集合中userid中包含10031004的文档
db.comment.find({ userid: {$in: ['1003', '1004']} })
例:查询评论集合中userid中不包含10031004的文档
db.comment.find({ userid: {$nin: ['1003', '1004']} })

条件连接查询

$and$or操作符

$and: [{条件1}, {条件2}, ...] 和 $or: [{条件1}, {条件2}, ...]
​
例:查询评论集合中likenum大于等于700并且小于2000所有的文档
db.comment.find({$and: [ { likenum: {$gte: 700} }, { likenum: {$lt: 2000} } ] })
​
例:查询评论集合中userid为1003,或者点赞小于1000的文档记录
db.comment.find({ $or: [ { userid: 1003 }, { userid: {$lt: 1000} } ] })

数组查询

$size操作符

例:查询like数组长度为3的文档
db.comment.find({ like: {$size: 3} })

去重查询

db.comment.distinct('字段') 
// 返回一个数组

常用命令小结

选择切换数据库:use 数据库名
插入数据:db.comment.insert({bson数据})
查询所有数据:db.comment.find()
条件查询数据:db.comment.find({条件})
查询符合条件的第一条记录:db.comment.findOne({条件})
查询符合条件的前几条记录:db.comment.find({条件}).limit(条数)
查询符合条件的跳过的记录:db.comment.find({条件}).skip(条数)
修改数据:db.comment.update({条件}, { $set: {字段名: 值} }, { multi: true }) 
// multi 更新所有符合条件
修改数据并自增某字段值:db.comment.update({条件}, { $inc: {字段名: 自增值} })
删除数据:db.comment.remove({条件})
统计查询:db.comment.count({条件})
模糊查询:db.comment.find({字段名: 正则表达式})
条件比较运算:db.comment.find({ 字段名: {$gt: 值} })
包含查询:db.comment.find({ 字段名:{$in: [值1, 值2, ...]} })// 不包含是$nin
条件连接查询:db.comment.find({ $and: [{条件1}, {条件2}] }) // 或是$or