Mongo数据库学习

43次阅读

共计 1667 个字符,预计需要花费 5 分钟才能阅读完成。

第二章. MongoDB 基础知识

1 文档

文档相当于关系型数据库中的 row。

文档中的键值对是有序的。

2 集合

一个集合就相当于一个表。

2.1 动态模式

假设集合里面一个名为 ”type” 的字段用于指明文档是水果还是蔬菜,那么应该将这两种 不同类型的文档拆分成两个集合

2.2 子集合(有疑问)

使用“.”分割不同命名空间的子集合。在 MongoDB 中,使用子集合来组织数据非常高效,值得推荐。

3 数据库

多个文档组成集合,多个集合组成数据库。

数据库名应全部小写。

数据库最终会变成文件系统中的文件,所以数据库名有很多限制。

自带保留数据库:

  • admin

    对应“root”数据库,添加一个用户后,自动获取所有数据库权限。

  • local

    永不可复制

  • config

    存储分片信息

4 启动

默认启动 C:\data\db 目录,不存在会报错。

5 MongoDB shell

shell 是一个功能完备的 JavaScript 解释器,可运行 JavaScript 程序。

Mongo 可使用 JavaScript 标准库,定义和调用 JavaScript 函数。

db.help()查看数据库级别的帮助,db.foo.help()查看集合级别的帮助。

5.1 创建

> db.blog.insert({"name":"Rohan","date":new Date()})

5.2 读取

  • find()

    shell 会自动显示最多 20 个匹配的文档

  • findOne()

5.3 更新

update 至少接受两个参数

6. 数据类型

Mongo 在 JSON 包含的六种数据类型:null、布尔、数字、字符串、数组和对象。的基础上新增了其他类型:

  • null
  • 布尔型
  • 数值型

    默认 64 位浮点型数值,整型 eg:{"x" : NumberInt("3")}

  • 字符串
  • 日期

    {"x" : new Date()}

  • 正则表达式

    {"x" : /foobar/i}

  • 数组

    可以包含不同数据类型的元素

  • 内嵌文档
  • 对象 id

    {"x" : ObjectId()}

  • 二进制数据
  • 代码

    可以包含任意 JavaScript 代码

第三章. CRUD

3.1 插入

db.foo.insert({"bar" : "baz"})

  • 批量插入batchInsert

    接收的参数是一个数组里面嵌套字典,此时会生成多个 document,eg:

    db.foo.batchInsert([{"name" : "Rohan"},{"sex": "None"}])

    批量插入的最大消息为 48MB,超过时,多数驱动程序会将这个请求拆分为多个 48MB 的请求。

    批量插入时,某个文档失败时,之前插入的 OK,后续的无法进行,如果期望忽略错误,可以使用 continueOnError 选项。

  • 校验

    所有的文档必须小于 16MB,Object.bsonsize(doc)查看文档大小

3.2 删除

db.foo.remove({"可选":"键值对"})

永久删除,不能撤销,不能恢复。

  • 清空集合(表)

    db.foo.drop()速度更快

3.3 更新

db.foo.update({"定位器":"value"},{新的集合})

此操作属于将新的文档完全替换掉了目标文档,甚至包括 _id,当然_id 不能重复不然失败。千万小心使用!!!

3.3.1 修改器

  1. $set修改器

    指定定位器文档的一个字段的值,如果这个字段不存在,则创建;存在则更新:

    do.foo.update({"user":"Rohan"},{"$set":{"最喜欢的语言":"Python"}})

    注意此处 $set 后面跟着一个字典,是一个嵌套文档。

    $set可以修改值的类型,从字符串变为 list。

    $set可以修改嵌套文档,eg:

    do.foo.update({"user":"Rohan"},{"$set":{"address.company":"山东"}})

    $unset可以将这个键完全删除,eg:

    do.foo.update({"user":"Rohan"},{"$unset":{"最喜欢的语言":1}})

  2. $inc数值修改器

    同样字段不存在,则创建;存在则在原有基础上增加,只能是数字,eg:

    do.foo.update({"user":"Rohan"},{"$inc":{"Age":25}})

正文完
 0