一、limit与skip
limit:
方法limit():用于读取指定数量的文档
语法:
db.集合名称.find().limit(NUMBER)
参数NUMBER表示要获取文档的条数
如果没有指定参数则显示集合中的所有文档
例1:查询2条学生信息
db.stu.find().limit(2)
skip:
方法skip():用于跳过指定数量的文档
语法:
db.集合名称.find().skip(NUMBER)
参数NUMBER表示跳过的记录条数,默认值为0
例1:查询从第3条开始的学生信息
db.stu.find().skip(2)
(方法limit()和skip()可以一起使用,不分先后顺序)
创建数据集 :
for(i=0;i<15;i++){
db.t1.insert({_id:i})
}
查询第5至8条数据
db.stu.find().limit(4).skip(5)
或
db.stu.find().skip(5).limit(4)
二、MongoDB投影
定义:在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
如:一个文档有5个字段,需要显示只有3个,投影其中3个字段即可
语法:
参数为字段与值,值为1表示显示,值为0不显示
db.集合名称.find({},{字段名称:1,…})
对于需要显示的字段,设置为1即可,不设置即为不显示
特殊:对于_id列默认是显示的,如果不显示需要明确设置为0例1db.stu.find({},{name:1,gender:1})
例2db.stu.find({},{_id:0,name:1,gender:1})
三、MongoDB消除重复
方法distinct()对数据进行去重
语法
db.集合名称.distinct(‘去重字段’,{条件})
例:查找年龄大于18的学生,来自哪些省份
db.stu.distinct(‘hometown’,{age:{$gt:18}})
四、unwind的深入理解
将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
语法1—
对某字段值进行拆分
db.集合名称.aggregate([{
u
n
w
i
n
d
:
′
unwind:'
unwind:′字段名称’}])
构造数据
db.t2.insert({_id:1,item:‘t-shirt’,size:[‘S’,‘M’,‘L’]})
查询
db.t2.aggregate([{
u
n
w
i
n
d
:
′
unwind:'
unwind:′size’}])
语法2—
对某字段值进行拆分
处理空数组、非数组、无字段、null情况
属性preserveNullAndEmptyArrays值为false表示丢弃属性值为空的文档
属性preserveNullAndEmptyArrays值为true表示保留属性值为空的文档
db.inventory.aggregate([{
KaTeX parse error: Expected '}', got 'EOF' at end of input: … path:'字段名称’,
preserveNullAndEmptyArrays:#防止数据丢失
}
}])
构造数据
db.t3.insert([
{ “_id” : 1, “item” : “a”, “size”: [ “S”, “M”, “L”] },
{ “_id” : 2, “item” : “b”, “size” : [ ] },
{ “_id” : 3, “item” : “c”, “size”: “M” },
{ “_id” : 4, “item” : “d” },
{ “_id” : 5, “item” : “e”, “size” : null }
])
使用语法1查询
db.t3.aggregate([{
u
n
w
i
n
d
:
′
unwind:'
unwind:′size’}])
查看查询结果,发现对于空数组、无字段、null的文档,都被丢弃了
问:如何能不丢弃呢?
答:使用语法2查询
db.t3.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: unwind:{path:'size’,preserveNullAndEmptyArrays:true}}])
五、MongoDB索引
在mysql中已经学习了索引,并知道索引对于查询速度的提升
mongodb也支持索引,以提升查询速度
步骤一:创建大量数据
在命令行中执行如下代码,向集合中插入10万条文档
注意:不要在图形界面中执行,因为软件原因无法插入10万条数据就会中断执行for(i=0;i<100000;i++){
db.t1.insert({name:‘test’+i,age:i})
}
步骤二:数据查找性能分析
查找姓名为’test10000’的文档
db.t1.find({name:‘test10000’})
使用explain()命令进行查询性能分析
db.t1.find({name:‘test10000’}).explain(‘executionStats’)
其中的executionStats下的executionTimeMillis表示整体查询时间,单位是毫秒
步骤三:建立索引
创建索引
1表示升序,-1表示降序
db.集合.ensureIndex({属性:1})
如
db.t1.ensureIndex({name:1})
步骤四:对索引属性查询
执行上面的同样的查询,并进行查询性能分析
db.t1.find({name:‘test10000’}).explain(‘executionStats’)
六、备份与恢复
备份:
语法:mongodump -h dbhost -d dbname -o dbdirectory
-h:服务器地址,也可以指定端口号
-d:需要备份的数据库名称
-o:备份的数据存放位置,此目录中存放着备份出来的数据
例1sudo mkdir test1bak
sudo mongodump -h 192.168.196.128:27017 -d test1 -o ~/Desktop/test1bak
恢复:
语法:mongorestore -h dbhost -d dbname --dir dbdirectory
-h:服务器地址
-d:需要恢复的数据库实例
–dir:备份数据所在位置
例1mongorestore -h 192.168.196.128:27017 -d test2 --dir ~/Desktop/test1bak/test1
本文详细介绍了MongoDB的高级操作技巧,包括数据筛选、投影、去重、数组字段拆分、索引创建及备份恢复等核心功能,助力开发者高效管理和查询数据。
3233

被折叠的 条评论
为什么被折叠?



