热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NoSQL学习之路(四):创建、读

本文地址:欢迎转载,请保留此链接!本文介绍数据库的4个基本操作:创建、读

本文地址: 欢迎转载 ,请保留此链接 ! 本文介绍数据库的4个基本操作:创建、读

  本文地址: 欢迎转载 ,请保留此链接• •!

  本文介绍数据库的4个基本操作:创建、读取、更新和删除(CRUD)。

  MongoDB没有类似sqlserver 的manager studio、mysql的workbench等工具。接下来的数据库操作演示,我们只能使用MongoDB自带简洁但功能强大的Javascript shell,MongoDB shell是一个独立的DB客户端(它也是功能完备的Javascript解释器 可以运行任何Javascript程序),MongoDB shell的使用介绍请阅读博文《NoSQL学习之路(三):MongoDB Shell的使用》。

CRUD 1.C 创建

  insert函数添加一个文档到集合里面。

  直接将文档作为参数:  

  >db.post.insert({"title":"Ex.1"})

  或者将文档赋值给变量,变量作为方法的参数。

  下面我们添加一篇文章。首先,创建一个局部变量post,Javascript对象作为文档的内容的赋值给post。里面会有"title","author","content"和"date"等键值。

  

  使用count()查询集合中文档条数:

  

当我们成功的插入一条文档到集合中后,我们会发现多了一个键"_id"和自动生成的ObjectId类型值。[详情:]

当插入多个文档到一个集合的时候,请使用批量插入会快一些。批量插入能传递一个由文档构成的数组给数据库。这样避免了许多零碎的请求所带来的开销。

要是只是导入原始数据(例如,从MySQL中导入 ),可以使用命令行工具,如mongoimport,而不是使用批量插入。另一方面,可以用它在存入MongoDB之前对数据做一些小的修整(转换日期成为日期类型,或添加自定义的"_id"所以批量插入对导入数据来说也是有用的。  

当执行插入的时候,使用的驱动程序会将数据转换成BSON的形式,然后将其送入数据库。数据库解析BSON,检验是否包含"_id"键并且文档不超过4MB。要查看doc文档转为BSON的大小(以字节为单位),在shell中运行 Object.bsonsize(doc)即可。
MongoDB在插入时并不执行代码,不做别的数据验证,就只是简单地将文档原样存入数据库中.虽然会导致插入无效的数据,但是它能让数据库更加安全,远离注入式攻击。

2.R读取

  find会返回集合里面所有的文档。findOne(注意大小写 findone 是无效的)查看一个文档。

  find和findOne可以接受査询文档形式的限定条件。这将通过査询限制匹配的文档。使用find时,shell自动显示最多20个匹配的文档,但可以获取更多文档。

  

3.U更新

  更新操作是原子的:若是两个更新同时发生,先到达服务器的先执行,接着执行另外的。  

  update接受(至少)两个参数:第一个是要更新文档的限定条件,网站空间,第二个是新的文档。

  注意:若是集合中有多个文档匹配查询条件,更新时会查询条件匹配了,然后更新的时候由于第二个参数的存在就产生重复的"_id"值,数据库会报错。限定条件尽量只能筛选出一条文档记录来。

  假设决定给我们先前写的文章增加标签,则需要增加一个新的键,对应的值是存放标签的数组。
  第一步修改变量post,增加"tags"键:

  

  shell输入post回车,post变量中文档值已经包含了tags数组了。

  

  使用update方法更新文档后,香港空间,文档中便有了"tags"键的内容。

4.D删除

  remove用来从数据库中永久性地删除文档,不能回复和撤销。

  在不使用参数进行调用的情况下,它会删除一个集合内的所有文档,不会删除集合本身,原有的索引也会保留。。

  >db.posts.remove()

  它也可以接受一个文档以指定限定条件作为参数。

  


  集合现在又是空的了。

  如果要清除整个集合,直接删除集合(然后重建索引)会更快,使用drop_collection函数。

  >>db.drop_collection(collection_name)

Objectld

  官方wiki:

  当我们成功的插入一条文档到集合中后,我们会发现多了一个键"_id"和自动生成的ObjectId类型值。通常会在客户端由驱动程序完成。原因如下:

  • MongoDB的设计理念:能从服务器端转移到驱动程序来做的事,就尽量转移。扩展应用层也要比扩展数据库层容易得多。将事务交由客户端来处理,就减轻了数据库扩展的负担。
  • 在客户端生成Objectld,驱动程序能够提供更加丰富的API。
  •   集合中每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。Objectld是"_id"的默认类型,它是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它。mongodb从开始设计就被定义为分布式数据库,处理多个节点是一个核心要求。若采用传统的自增主键策略,在多台服务器上同步自动增加主键既费力又费时。

      

    0 1 2 3 4 5 6 7 8 9 10 11

    时间戳 机器名 PID 计数器

      

      ObjectId占用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串。由“时间戳” 、“机器名”、“PID号”和“计数器”组成。使用机器名的好处是在分布式环境中能够避免单点计数的性能瓶颈。使用PID号的好处是支持同一机器内运行多个mongod实例。最终采用时间戳和计数器的组合来保证唯一性。


      1.时间戳  4个字节。从标准纪元开始,单位为秒。

      2.机器名  3个字节。所在主机的唯一标识符。通常是机器主机名的散列值,机器名通过Md5加密后取前三个字节。

    推荐阅读
    • Docker的安全基准
      nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
    • 深入理解 SQL 视图、存储过程与事务
      本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
    • MySQL缓存机制深度解析
      本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
    • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
    • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
    • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
    • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
      本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
    • Hadoop入门与核心组件详解
      本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
    • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
    • 数据库内核开发入门 | 搭建研发环境的初步指南
      本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
    • 解决MongoDB Compass远程连接问题
      本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
    • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
    • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
    • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
    • MySQL索引详解与优化
      本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
    author-avatar
    想零的时候
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有