一、文档的查询

1. 统计查询

  • 统计查询使用count()方法,语法如下:
db.collection.count(query, options)

参数

类型

说明

query

document

查询选择条件

options

documnet

可选。用于计数的额外选项

例如: 查询所有记录数

db.collection.count()

例如:按条件统计记录数,统计userid为1003的记录条数

db.collection.count({userid:"1003"})

提示:默认情况下,count()方法返回的是符合条件的全部记录数。

2. 分页查询

  • 可以使用limit()方法来获取指定数量的数据,使用skip()方法来跳过指定数量的数据。
  • 基本语法:
db.集合名.find().limit(NUMBER).skip(NUMBER)
  • 如果你想返回指定条数的记录,可以在find方法后面调用limit来返回结果(TopN),默认值20,
db.collection.find().limit(3)
  • skip方法同样接受一个数字参数作为跳过的记录条数。(前N个不要),默认值是0
db.collection.find().skip(3)
  • 分页查询:需求:每页2个,第二页开始:跳过前两条数据,接着显示3和4条数据
//第一页
db.collection.find().skip(0).limit(2)
//第二页
db.collection.find().skip(2).limit(2)
//第三页
db.collection.find().skip(4).limit(2)

3. 排序查询

  • sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用1和-1来指定排序的方式,其中1为升序排序,而-1用于降序排序。
  • 语法如下:
db.集合名.find().sort(排序方式)
  • 例如:对userid降序排序 ,并对访问量升序排序
db.collection.find().sort({userid:-1, likenum:1})

提示:skip(),limit(),sort()三个放在一起查询的时候,执行顺序是先sort(),然后是skip(),最后显示的limit(),和命令编写顺序无关。

4. 正则的复杂条件查询

  • MongoDB的模糊查询是通过正则表达式的方式来实现的。格式为:
db.集合名.find({字段:/正则表达式/})
  • 提示:正则表达式是js语法,直接量的写法。
  • 例如,我要查询评论内容包含"开水"的所有文档
db.collection.fid({content:/开水/})
  • 如果要查询评论的内容中以"专家"开头的。
db.collection.find({content:/^专家/})

5. 比较查询

  • < 、<= 、>、>=这些操作符也是很常用的,格式如下:
db.集合名.find({"字段名":{$gt:value}}) 	//大于: field > value
db.集合名.find({"字段名":{$lt:value}})	//小于: field < value
db.集合名.find({"字段名":{$gte:value}})	//大于等于: field >= value
db.集合名.find({"字段名":{$lte:value}})	//小于等于: field <= value
db.集合名.find({"字段名":{$lte:value}})	//小于等于: field <= value
  • 例如:查询年龄大于等于50小于60的记录
db.collection.find({"age":{$gte:50,$lt:60}})

6. 包含查询

  • 包含使用 $in操作符。
  • 例如:查询评论集合中userid字段包含1003或1004的文档
db.collection.find({userid:{$in:["1003","1004"]}})
  • 不包含使用$nin操作符
  • 例如:查询评论集合中userid字段不包含1003或1004的文档
db.collection.find({userid:{$nin:["1003","1004"]}})

7. 条件连接查询

  • 我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。(相当于sql的and)格式为:
$and:[{},{},{}]
  • 例如:查询评论集合中likenum大于等于700并且小于2000的文档
db.collection.find({$and:[{likenum:{$get:700}},{likenum:{$lt:2000}}]})
  • 如果两个以上条件之间是或者关系,我们使用操作符进行关联,与前面and的使用方式相同,格式为:
$or:[{},{},{}]
  • 例如: 查询评论集合中userid为1003,或者点赞数小于1000的文档记录
db.collection.find({$or:[{userid:"1003"}, {likenum:{$lt:10000}}]})

二、常用命令小结

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