经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MongoDB » 查看文章
mongodb的写操作
来源:jb51  时间:2019/1/23 9:06:03  对本文有异议

使用插入数据命令:

>insert

需要注意的是,如果插入一文件(现在理解,nosql 类型的db数据不能说是记录了,它是已文件作为单位,而传统型的关系型数据库,我们说是插入一条记录),如果没有带人_id,那么会自动生成一个唯一的id,这个id好比关系型数据库里的主键一样。

如果是自己指定id,那么必须id是唯一的,这点关系型和nosql型都必须要求的;

数据字段的名字不能包含$ 和.

在敲了一阵发现,擦,我要是再shell里面去编写复杂的插入语句,就shell的这种一行一句,不搞死我去啊。我想它肯定是支持向bat这种批处理或者其他,看它语法和js一模一样,于是大胆猜测它使用的就是javascript,于是我就用notepad++来编辑这些插入命令,试着插入复杂的对象;

哦,另外说一句,如果这个bios数据不存在,那么要先使用

>use bios

生成一个数据库,如果你不往这里插入一笔数据,mongoDB会自动删除掉这个数据库;

所以还要插入一笔让mongodb维持这数据库的任意数据

>db.bios.insert({a:'a'})

编写了一个insert.js脚步,放在安装目录的js文件夹下。于是这样输入:

>mongolocalhost:27017/bios f:\mongodb\js\insert.js

效果如图

可以看到,这个js脚步成功执行;

要查询这个文档,输入命令:

>db.bios.find({ name: { first: 'John', last: 'chen' } } );

有了js写更多的语句,就方便多了。

Isert语句支持多个批量插入就像下面这样:

Insert.js 语句:

  1. db.bios.insert(
  2. [
  3. {
  4. _id: 3,
  5. name: { first: 'Grace', last: 'Hopper' },
  6. title: 'Rear Admiral',
  7. birth: new Date('Dec 09, 1906'),
  8. death: new Date('Jan 01, 1992'),
  9. contribs: [ 'UNIVAC', 'compiler', 'FLOW-MATIC', 'COBOL' ],
  10. awards: [
  11. {
  12. award: 'Computer Sciences Man of the Year',
  13. year: 1969,
  14. by: 'Data Processing Management Association'
  15. },
  16. {
  17. award: 'Distinguished Fellow',
  18. year: 1973,
  19. by: ' British Computer Society'
  20. },
  21. {
  22. award: 'W. W. McDowell Award',
  23. year: 1976,
  24. by: 'IEEE Computer Society'
  25. },
  26. {
  27. award: 'National Medal of Technology',
  28. year: 1991,
  29. by: 'United States'
  30. }
  31. ]
  32. },
  33. {
  34. _id: 4,
  35. name: { first: 'Kristen', last: 'Nygaard' },
  36. birth: new Date('Aug 27, 1926'),
  37. death: new Date('Aug 10, 2002'),
  38. contribs: [ 'OOP', 'Simula' ],
  39. awards: [
  40. {
  41. award: 'Rosing Prize',
  42. year: 1999,
  43. by: 'Norwegian Data Association'
  44. },
  45. {
  46. award: 'Turing Award',
  47. year: 2001,
  48. by: 'ACM'
  49. },
  50. {
  51. award: 'IEEE John von Neumann Medal',
  52. year: 2001,
  53. by: 'IEEE'
  54. }
  55. ]
  56. },
  57. {
  58. _id: 5,
  59. name: { first: 'Ole-Johan', last: 'Dahl' },
  60. birth: new Date('Oct 12, 1931'),
  61. death: new Date('Jun 29, 2002'),
  62. contribs: [ 'OOP', 'Simula' ],
  63. awards: [
  64. {
  65. award: 'Rosing Prize',
  66. year: 1999,
  67. by: 'Norwegian Data Association'
  68. },
  69. {
  70. award: 'Turing Award',
  71. year: 2001,
  72. by: 'ACM'
  73. },
  74. {
  75. award: 'IEEE John von Neumann Medal',
  76. year: 2001,
  77. by: 'IEEE'
  78. }
  79. ]
  80. }
  81. ]
  82. );
  83. db.bios.insert(
  84. {
  85. name: { first: 'John', last: 'McCarthy' },
  86. birth: new Date('Sep 04, 1927'),
  87. death: new Date('Dec 24, 2011'),
  88. contribs: [ 'Lisp', 'Artificial Intelligence', 'ALGOL' ],
  89. awards: [
  90. {
  91. award: 'Turing Award',
  92. year: 1971,
  93. by: 'ACM'
  94. },
  95. {
  96. award: 'Kyoto Prize',
  97. year: 1988,
  98. by: 'Inamori Foundation'
  99. },
  100. {
  101. award: 'National Medal of Science',
  102. year: 1990,
  103. by: 'National Science Foundation'
  104. }
  105. ]
  106. }
  107. )
  108. c = db.bios.find( { name: { first: 'John', last: 'McCarthy' } } );
  109. while((c.hasNext())) printjson(c.next())

=================================================

Mongo还有个save方法,这个方法同样也是插入数据。咋一样是一样的,仔细想想如果是一样的,那干嘛不统一,于是想到了ORM模式中,数据的save方法中,如果要保存的数据已存在,那么它知道是修改这个数据,如果不存在则是新增。同样,这里save也是如此。

如果save方法带了_id那么,如果数据库中存在了此_id的文档,那么,会修改原有数据,如果没有,则新增,所以,不带_id的save方法和insert是一样的,但是Insert方法如果插入的是相同的Id,那么是不会插入的;

更新操作,传统的数据库更新操作,必须是更新的数据已经存在,要不然你想,你数据记录都不在便要更新,这不扯淡吗,但是,mongodb却可以这样,如果要更新的数据不存在,那么便插入这文档数据;

更新语法:

db.collection.update(<query>,<update>, { upsert: true } )

如果是更新具体某个,那么带_id的save方法同样可以完成更新任务;

查询可发现改变的数据:

  1. >c =db.bios.find( { name: { first: 'update', last: 'update' } } );
  2. >while((c.hasNext()))printjson(c.next())

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对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号