MongoDB:超适合小白练手的操作语句练习!不信你练完还不会!

一 数组相关

1.进入my_test数据库

use my_test

2.向数据库的users集合中插入一个username为sunwukong的文档

db.users.insert({username:"sunwukong"})

3.向数据库的users集合中插入一个{username:"zhubajie"}和一个{username:'shaheshang",address:"liushahe"}的两个文档

db.users.insert([{username:"zhubajie"},{username:”shaheshang",address:"liushahe"}])
db.users.insertMany([{username:"zhubajie"},{username:'shaheshang",address:"liushahe"}])

4.查询数据库users集合中的文档

db.users.find()

5. 统计数据库users集合中的文档数量

db.users.count()

6. 查询数据库users集合中username为sunwukong的文档

db.users.find({username:"sunwukong"})

7. 向数据库users集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan

db.users.update({username:"sunwukong"},{$set:{address:"huangongshan"}})

8. 使用{username:"tangseng"} 替换 username 为 zhubajie的文档

db.users.update({username:"zhubajie"},{username:"tangseng"})

9. 删除username为shaheshang的文档的address属性

db.users.update({username:"shaheshang"},{$unset:{address:""}})

10.删除address为huanguoshan的文档

db.users.remove({address:"huaguoshan"})

11.向username为sunwukong的文档中,添加一个hobby{cities[beijing,shanghai,shenzhen] , movies[sanguo,hero]}

  --MongoDB的文档属性值也可以是一个文档,当一个文档的属性值是一个文档时,称这个文档为“内嵌文档”

 db.users.update({username:"sunwukong"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"], movies:["sanguo","hero"]}}})

12.向username为tangseng的文档中,添加一个hobby{movies[A Chinese Odyssey,King of comedy]}

 db.users.update({username:"tangseng"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})

13.查询喜欢电影hero的文档

  --MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式来匹配

  --如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号

  db.users.find({"hobby.movies":"hero"})

14.向tangseng中添加一个新的电影Interstellar

  --$push 向数组中添加一个新的元素,如果数组中已经存在了该元素,也会添加

  --$addToSet 向数组中添加一个新的元素,如果数组中已经存在了该元素,则不会添加

  db.users.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}})

15.删除喜欢beijing的用户

  db.users.remove({"hobby.cities":"beijing"})

16.删除user集合

  db.users.drop()

--补充:从数组中删除元素

db.users.update({username:"tangseng"},{$pop:{"hobby.movies":1}})

db.users.update({username:"tangseng"},{$pull:{"hobby.movies":"Interstellar"}})

db.users.update({username:"tangseng"},{$pullAll:{"hobby.movies":["Interstellar",”hero”]}})

--$pop:属性值为1删除数组中的最后一个元素,值为-1删除数组中的第一个元素

--$pull:删除属性值指定的元素

--$pullAll:属性值是一个数组,删除属性值数组中的所有元素

17.向numbers中插入20000条数据

---方法一:

    for(var i=1;i<=20000;i++)

    {

      db.numbers.insert({num:i});

     }

----方法二:

    var arr=[]

    for(var i=1;i<=20000;i++)

    {

      arr.push({num:i});

}

db.numbers.insert(arr)

18.查询numbers中num为500的文档

  db.numbers.find({num:500})

19.查询numbers中num大于5000的文档

  db.numbers.find({num:{$gt:500}})

20.查询numbers中num小于30的文档

 db.numbers.find({num:{$lt:30}})

21.查询numbers中num大于40小于50的文档

  db.numbers.find({num:{$gt:40,$lt:50}})

  db.numbers.find({$and:[{num:{$lt:50}},{num:{$gt:40}}]}) 

22.查询numbers中num大于19996的文档 

db.numbers.find({num:{$gt:19996}})

23.查看numbers集合中的前10条数据

  --limit()设置显示数据的上限

  db.numbers.find().limit(10)

24.查看numbers集合中的第11条到20条数据

  --skip()用于跳过指定数量的数据

db.numbers.find().skip(10).limit(10)

25.查看numbers集合中的第21条到30条数据

  db.numbers.find().skip(20).limit(10)

  --MongoDB会自动调整skip()limit()的顺序,所以skip()limit()反过来也可以

二 insert与find基本操作

1.在s集合中插入以下数据。(insert、insertOne、insertMany都试试)

2.查询学号为1001同学的姓名

db.s.find({sno:"1001"},{sname:1})

3.查询学生的人数

db.s.find().count()

4.查询18岁的lisi的学号和姓名

db.s.find({"age":18,"sname":"lisi"},{sno:1,sname:1,_id:0})

5.查询zhangsan及所有18岁同学的信息

db.s.find({$or:[{sname:"zhangsan"},{age:18}]})

6.查询年龄为11或18岁的同学的姓名

db.s.find({$or:[{age:11},{age:18}]},{sname:1,_id:0})

7.查询第一个文档

db.s.findOne()

8.查询第五个文档

db.s.find()[4]

三 update和remove操作

1.复制集合s,新集合名称为sbak。在sbak中完成以下操作

db.s.find({}).forEach(function(x){db.sbak.insert(x)})

2 修改学号为1001同学的年龄为20岁

db.sbak.update({sno:"1001"},{$set:{sage:20}})

3.所有男同学的文档增加addr属性,值为“hebei”

db.sbak.update({ssex:"nan"},{$set:{addr:"hebei"}},{multi:true,upsert:true})

4.删除wangwu同学的年龄属性

db.sbak.update({sname:"wangwu"},{$unset:{sage:22}})

5.修改zhangsi同学的年龄属性为20,如果没有满足条件的则插入这个文档

db.sbak.update({sname:"zhangsi"},{$set:{sage:20}},{multi:true,upsert:true})

6.修改所有文档的sage属性为age

db.sbak.update({},{$rename:{"sage":"age"}},{multi:true})

7.修改所有男生的年龄为原来的2倍

db.sbak.update({ssex:"nan"},{$mul:{age:2}},{multi:true})

8.修改所有女生的年龄加1岁

db.sbak.update({ssex:"nv"},{$inc:{age:1}},{multi:true})

9.删除年龄小于18岁的文档

db.sbak.remove({age:{$lt:18}})                           

10.删除sbak中的所有文档

db.s.remove({})

高级查询

1.查询第2到第5个文档 

db.s.find().skip(1).limit(5)

2.男生按年龄的降序排序

db.s.find({ssex:"nan"}).sort({sage:-1})

3.统计18岁(含)以下的学生人数

db.s.find({sage:{$lte:18}}).count()

4.显示女生的姓名和年龄

db.s.find({ssex:"nv"},{sname:1,sage:1,_id:0})

5.查询年龄最大的两个男生的姓名

db.s.find({ssex:"nan"},{sname:1,_id:0}).limit(2).sort({sage:-1})

6.给学号按升序创建一个唯一索引

db.s.createIndex({sno:1},{unique:true}) db.s.getIndexes()

7.查询16岁以上学生的性别(重复的只显示一次)

db.s.distinct("ssex",{sage:{$gt:16}})

8.查询姓名包含字母“i”的学生

db.s.find({sname:/i/})

五 文档之间的关系

1.查询工资小于2000的员工

db.emp.find({sal:$lt:2000})

2.查询工资在1000-2000之间的员工

db.emp.find({sal:{$lt:2000,$gt:1000}})

3.查询工资小于1000或大于2500的员工

db.emp.find({$or:[{sal:{$lt:1000}},{sal:{$gt:2500}}]})

4.查询财务部的所有员工

db.emp.find({depno:db.dept.find({dname:"财务部"})[0].deptno})

5.查询销售部的所有员工

db.emp.find({depno:db.dept.find({dname:"销售部"})[0].deptno})

6.查询所有mgr为7698的所有员工

db.emp.find({mgr:7698})

7.为所有薪资低于1000的员工增加工资400元

db.emp.updateMany({sal:{$lt:1000}},{$inc:{sal:400}})

8.为薪资最高的员工增加工资1元

db.emp.update({

empno:

db.emp.find({}).sort({sal:-1}).limit(1)[0].empno

},{$inc:{sal:1}

})

六 MongoDB综合练习

在MongoDB的gk集合里插入以下数据:

https://p.ananas.chaoxing.com/star3/origin/3110ce96f01e7ca2c8b601cbda695851.png

1.查询张三同学的成绩信息

db.gk.find({sname:"张三"},{sname:1,成绩:1},{_id:0})

2.查询李四同学的语文成绩

db.gk.find({sname:"李四"},{"成绩.语文":1},{_id:0})

3.查询没有选化学的同学

db.gk.find({"成绩.化学":null},{sname:1},{_id:0})

4.统计语文成绩的平均分

db.gk.aggregate([{$group:{_id:"",agerage:{$avg:"$成绩.语文"}}}])

5.查询英语成绩最高的同学

db.gk.find({},{sname:1},{_id:0}).limit(1).sort({"成绩.英语":-1})

6.求每个同学语数英三门课的总成绩

db.gk.aggregate([   
{ "$project": {"classes": [ "$成绩.数学", "$成绩.语文", "$成绩.英语"]}}, 
 { "$unwind": "$classes" },  
 { "$group": {"_id": "$_id","classes": { "$sum": "$classes" }}}])

七 数据查询和正则表达式

1.查询年龄大于20的zhaoliu的学生信息

db.s.find({sname:"zhaoliu",sage:{$gt:20}})

2.查询年龄在18到20岁之间的学生信息

db.s.find({sage:{$lte:20},{sage:{$gte:18}}})

3.查询年龄小于18或大于60的学生信息

db.s.find({$or:[{sage:{$gt:60}},{sage:{$lt:18}}]})

4.查询年龄为18和20岁的学生信息

db.s.find({$or:[{sage:18},{sage:20}]})

5.查询年龄不为18和20岁的学生信息

db.s.find({$or:[{sage:{$ne:18}},{sage:{$ne:20}}]}

6.查询姓名中包含“wang”的同学

db.s.find({"sname":{$regex:/wang/}})

7.查询姓“wang”的同学

db.s.find({"sname":{$regex:/^wang/}})

8.查询姓名的最后一个字为“i”的同学

db.s.find({"sname":{$regex:/i^/}})

9.查询姓名中包含“AN”的同学(不区分字母大小写)

db.s.find({"sname":{$regex:/AN/i}})

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值