mongodb 权威指南(一)

mongodb简介

  • mongodb是一个面向文档的数据库,面向文档不再有行的概念,取而代之的是更为灵活的‘文档’模型,通过文档嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层次关系。

  • 不再有预定义的模式,文档的键和值不再是固定类型和大小

数据库扩展

  • 纵向扩展
    • 是指使用能力更强的机器,缺点是大型机器昂贵,而且当数据库达到机器的物理极限时,再也没有更强的机器。
  • 横向扩展
    • 购买一台普通的服务器并把它添加到集群中。缺点,管理多台机器困难

mongodb解决数据库横向扩展中管理多台机器困难的做法

  • 面向对象的数据模型使它很容易在多台服务器之间进行数据分割,mongodb能自动处理跨集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。

mongodb基础知识

  • 文档是mongodb中数据的基本单元,类似于关系型数据库中的行,键值对的一个有序集(相同字段,字段的顺序不同,文档也不同)
  • 集合可以看做是拥有动态模式的表
  • mongodb一个实例可以拥有多个相互独立的数据库,每一个数据库都拥有自己的集合
  • 每一个文档都有一个特殊的键‘_id’,是在文档所属集合中唯一的。
  • 自带js shell 可管理mongodb的实例或数据操作

集合的动态模式

  • 一个集合中文档是可以各式各样的,虽然一个集合可以防止不同类型的文档,但是将不同类型的文档拆分为不同的集合,每次查询相应的集合,速度快很多。

集合的命名

  • 不能为空,不能包含\0 $ ,不能以system.开头
  • 子集合应使用'.'来分割不同的命名空间的子集合

数据库

  • 多个文档组成一个集合,而多个集合组成数据库

启动

  • 命令 在bin目录下运行cmd mongod --dbpath 数据库文件夹路径
  • 如果端口被占用启动失败,通常是已经有一个数据库实例在运行了

javascript shell 与 sql shell

  • 在数据库启动的情况下再次进入bin目录运行mongo,可以任意执行js的语法
  • 执行db 查看当前指向的数据库
  • 通过db变量可以访问其中的集合

shell的基本操作

  • 创建: db.集合名.insert(对象),当集合名中包含无效的javascript属性名称是可以使用db.getCollection('集合名')代替。
命令行
  • 查看: db.集合名.find()

    • find() 和 findone() find查找集合所有的文档,findone可接受一个查询文档为限制条件
  • 更新:update接受两个参数,第一个是限定条件(用于匹配待更新的文档),第二个是新的文档

    • post.comment = [1,3];
    • db.test.update({'title':'test'},post)
  • 删除 remove方法可将文档从数据库永久删除,接受限定条件文档作为参数删除,可传入一个空对象将集合所有文档删除

    • db.test.remove({'title':'test'})

基本数据类型

  • 除了基本的json格式,如:null,true,false,数值,字符串、日期、正则、数组,内嵌文档(即对象嵌套)还增加了:

    • 对象id: ObjectId("586db3fcf818ef7cc160e01d") =》 { "i" : ObjectId("586db417f818ef7cc160e01e") },是由时间戳,机器主机散列值、进程标识pid和计数器组成的12字节,每个字节存储两个十六进制数字
    • 二进制数据 二进制数据是一个任意字节的字符串,如果要将utf-8字符保存在数据库中,二进制数据是唯一的方式
  • 使用日期时始终用 new Date() 而不是将其当做普通函数调用,因为Date()调用返回的是字符串,而构造函数返回的是一个日期对象,由于日期和字符串之间无法匹配,会导致执行操作时出现很多的问题。

  • _id,每个文档必须有一个“_id”键,这个值可以是任何类型的,默认是ObjectId对象,在两个集合中可以有相同_id的文档,同一个集合中不允许,确保文档都能被唯一标识

使用shell执行脚本

  • D:\mongo\bin>mongo ../test.js
  • load('../test.js')

你可能感兴趣的:(mongodb 权威指南(一))