经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MongoDB » 查看文章
MongoDB中的常用语句总结大全
来源:jb51  时间:2018/11/25 19:38:50  对本文有异议

前言

MongoDB与MySQL基本语句还是有很大区别的,今天再介绍一下MongoDB的一些常用的基本语句,下面话不多说了,来一起看看详细的介绍吧

MOngoDB  删除语句

delete()删除

删除一个集合

  1. db.collection.deleteOne()

删除多个集合

  1. db.collection.deletMany();

remove()删除

删除所有的name:李四的数据

  1. db.student.remove({name:"李四"});

只删除一条sex:男的数据 仅删除一条

  1. db.student.remove({sex:"男"},true);

删除全部

  1. db.student.remove({});

数据库假删除

有时候用户删除操作的时候,需求是这样的,仅是隐藏这条数据,并不是真的从数据库中删除。

这时候就用到假删除了,比如这个是张三发的两篇微博:

  1. db.student.insert([
  2. {name:"张三",content:"今天心情好",isDel:0},
  3. {name:"张三",content:"今天心情一般",isDel:0},
  4. ]);

用户增加两条数据,但只保留后一条,删除前一条,这时候用到假删除 ,在添加数据时加上一个字段isDel:0

所以当用户删除数据时候 执行的不是remove方法而是update方法

  1. db.student.update({"_id" : ObjectId("5bd6a46f1eb7a22fa07cb382")},{
  2. $set:{
  3. isDel:1
  4. }
  5. });

当isDel:0是表示用户没有删除 为1是表示用户已经删除

所以在查询的时候要筛选name和isDel条件即可

  1. db.student.find({name:"张三",isDel:0});

查询到用户没有删除的数据:

然后就可以实现假删除了。

批量数据的操作和修改

向集合中插入10000个文档

  1. var arr= [];
  2. for(var i=0;i<10000;i++){
  3. arr.push({counter:i});
  4. }
  5. db.demos.insert(arr);
  6. db.demos.find();

查询demos中counter为666的文档

  1. db.demos.find({counter:666});

查询demos中counter小于66的文档

  1. db.demos.find({counter:{$lt:666}});

查询demos中counter大T666的文档

  1. db.demos.find({counter:{$gt:666}});

查询demos中counter大于66小于666的文档1120查吉demos集合中的前10余数据

  1. db.demos.find({counter:{$gt:66, $lt:666}});

查石demos集合中的第1字到20条数据

  1. db.demos.find().limit(10);

查春demos集合中的第2 1条到30条数据  分页功能   skip从多少条开始 limit每次查询多少条

  1. db.demos.find().skip(0).limit(10);//第一页 从0条开始 每查询10条
  2. db.demos.find().skip(10).limit(10);//第二页 从10条开始 每查询10条
  3. db.demos.find().skip(20).limit(10);//第三页 从20条开始 每查询10条

集合中文档关系

  • 一对一(one to one):比如:人和身份证   老公和老婆
  • 一对多(one to many):比如:父母和孩子  用户和物品
  • 多对多(many to many):比如:老师和学生

一对一

以内嵌文档的形式体现,

  1. //一对一
  2. db.aAndb.insert([
  3. {name:"杨过",wife:{name:"小龙女",sex:"女"},sex:"男"},
  4. {name:"杨过",wife:{name:"小龙女",sex:"女"},sex:"男"}
  5. ])
  6.  
  7. db.aAndb.find();

一对多

通过内嵌文档的形式实现或者通过集合的形式实现

  1. //一对多 比如 微博 和 微博评论
  2. //添加微博
  3. db.weibo.insert([
  4. {weibo:"世界这么大,我想去看看"},
  5. {weibo:"我要做一名web开发者!!!"}
  6. ])
  7.  
  8. db.weibo.find();

添加评论

  1. db.comments.insert([
  2. {
  3. weibo_id: ObjectId("5bdd89e06a5e78f4cfc2b9c8"),
  4. list:[
  5. "那你有钱吗",
  6. "一个人吗??去呢啊??",
  7. "加油!!"
  8. ]
  9. },
  10. {
  11. weibo_id: ObjectId("5bdd89e06a5e78f4cfc2b9c9"),
  12. list:[
  13. "那你要学习HTML",
  14. "那还要你要学习css",
  15. "加油!!"
  16. ]
  17. }
  18. ]);
  19.  
  20. db.comments.find();

查询一对多

  1. var weibo_id= db.weibo.findOne({"weibo" : "世界这么大,我想去看看"})._id;
  2. db.comments.find({weibo_id: weibo_id});

多对多的关系

比如:学生和老师

可以通过多文档关联,

  1. //多对多 老师《------》学生
  2.  
  3. //插入老师集合
  4. db.teachers.insert([
  5. {
  6. name:"语文老师",
  7. teacher_id: 1,
  8. student_id:[
  9. 1001,
  10. 1002,
  11. 1003
  12. ]
  13. },
  14. {
  15. name:"数学老师",
  16. teacher_id: 2,
  17. student_id:[
  18. 1001,
  19. 1002,
  20. 1003
  21. ]
  22. },
  23. {
  24. name:"英语老师",
  25. teacher_id: 3,
  26. student_id:[
  27. 1001,
  28. 1002,
  29. 1003
  30. ]
  31. }
  32. ])
  33.  
  34. db.teachers.find();
  35.  
  36.  
  37. //插入学生集合
  38. db.students.insert([
  39. {
  40. name:"小明",
  41. student_id: 1001,
  42. teacher_id:[
  43. 1,
  44. 2,
  45. 3
  46. ]
  47. },
  48. {
  49. name:"小红",
  50. student_id: 1002,
  51. teacher_id:[
  52. 1,
  53. 2,
  54. 3
  55. ]
  56. },
  57. {
  58. name:"小刚",
  59. student_id: 1003,
  60. teacher_id:[
  61. 1,
  62. 2,
  63. 3
  64. ]
  65. }
  66. ])
  67.  
  68. db.students.find();
  69. db.teachers.find();

排序和索引

排序:

查询文档时,默认是按照_id的值进行排序的(升序)

sort() 可以用来指定文档的排序规则,sort() 内部需要传递一个对象来指定文档的排序规则 ,其中1表示升序 ,-1表示降序
limit skip sort 的顺序可以任意改变 ,运行时会自动调整。

不希望它默认按照id排序  希望它按照工资来排序

  1. //按照工资升序排列
  2.  
  3. db.section.find().sort({wages:1});
  4.  
  5. //优先按照工资升序排列 如果遇到相同的就在 按照id升序排列
  6. db.section.find().sort({wages: 1},{_id: -1});

索引:

展示字段中 部分内容

或者是提取这个字段内的部分内容

在查询时 ,可以在第二个参数来设置查询的结果投影

索引: find({ 查询条件 }, { 检索范围(1显示 0隐藏)})
注意: _id如果不设置默认是1(显示) 可手动隐藏

  1. db.section.find({}, {name: 1});
  2. //只显示name和wages字段
  3. `db.section.find({}, {name: 1, _id: 0, wages: 1});`

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对w3xue的支持。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号