MongoDB 学习之概念

发布于 2021-11-27 11:31:59 字数 3281 浏览 954 评论 0

这一章,我们先介绍几个 MongoDB 的概念:

  • document:它是MongoDB的基础数据单元,它大概等价于关系型数据库中的行。
  • collection:可以想象成动态的表。
  • 一个简单的 MongoDB 实例可以携带多个独立的数据库,每个数据库都有属于自己的 collections。
  • 每个 document 都有自己特殊的 key。_id 它在 collection 中是唯一值。
  • MongoDB 提供了一个简单而又强大的 JavaScript Shell,这对管理 MongoDB 实例和数据操作十分有用。

Documents

MongoDB 的核心就是 document。它其实是一个对象(键值对),例:

{"greeting":"Hello,world!"}

当然大多数的 document 比上面这个复杂的多,它的 value 可以有多种类型,当然还可以嵌套 document,后续会进行介绍。

document 的 key 值都是 string 类型。任何的 utf-8 字符都允许出现在 key 中,但有几个值得注意的地方:

  • key 不能包含字符 \0
  • 和 $ 字符应该最为保留字符,它们含有特殊的属性并在某些情况中会用到。

MongoDB 是类型敏感和大小写敏感的,举个例子:

{"foo":3}
{"foo":"3"}

上面例子的两个 object 是不相等的。

document 中不能包含重复的 key 值,这是不合法的。

Collections

collections 是一组 document 的集合,类似于关系型数据库中的表。不过 collection 可以是动态的。例如:

{"greeting":"Hello,World!"}
{"foo":5}

上面这两个 document 可以存在同一个 collection 中。

这样我们就会有一个疑问,既然 collection 是动态的,可以存不同的 document,那么我们为什么要将 collection 根据不同的 document 分离成多个 collecion 呢?

原因:

  1. 保存不同类型的 document 对程序员来说是个噩梦,因为我们做某些查询的时候,程序员必须确定返回的值里只有 A 类型的 document,这时清除不要的数据会很麻烦。
  2. 查询速度。
  3. 建立索引。

Databases

每个数据库都有它的权限,并且作为一个单独的文件存放在硬盘上。

数据库名字命名规则:

  1. 不能以空 “” 作为数据库名字
  2. 不能包含字符 :/,\,.,",*,<,>,:,|,?,$, 一个单独的空格 \0
  3. 数据库名字大小写敏感,建议都用小写字符
  4. 数据库名字最大 64 位。
  5. 数据库名字有保留字,有特殊意义(admin、local、config)

Introduction to the MongoDB Shell

MongoDB Shell 是一个功能齐全的 JavaScript 解释器,可以跑任意的 JavaScript 程序,我们还能利用所有标准的 JavaScript 库。

甚至我们还可以定义及调用 JavaScript 函数。你可以创建多行命令,当你按回车键时,Shell 会检测你的 JavaScript 脚本是否已完成。

连按三次回车键会取消输入一半的命令并且会给你 >_ 的返回提示。

Basic Operations with the Shell

Create

设想我们想要保存一篇博客,首先我们创建一个变量 post,它作为一个 JavaScript 的一个对象来代表 document。并且包含 key 值 title、content、data。

> post={
...   "title:"MyBlog Post",
...   "content":"Here's my blog post.",
...   "date":new Date()
... }

下来我们直接执行插入方法:

> db.blog.insert(post)

这是,这条数据就保存到数据库中了。 下来我们执行查询方法:

> db.blog.find()

就能看到我们刚刚插入的数据了。

Update

update有两个参数,第一个是用来查找要更新的 document,第二个是新的 document。

> post.comments=[]
>db.blog.update({"title":"MyBlog Post"},post)

上面代码是要给 post 添加一个 comments 的字段。

Delete

db.blog.remove({"title":"MyBlog Post"})

_id and ObjectIds

每个保存在 MongoDB 中的 document 都有 key 值 _id。 它可以是任何类型,但是默认的是 ObjectId,在一个 collection 中,每个 document 都有唯一的 _id 值,保证它是唯一的。

ObjectIds 在被设计时就是轻量级的。他在多台机器中很容易的就能生成全局的唯一值。 MongoDB 的分布式性质决定了为什么使用 objectId 而不是用传统的主键生成方式,例如自动增量。它在自动同步多台机器的主键时十分耗费时间。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

瑾夏年华

暂无简介

0 文章
0 评论
669 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文