MongoDB 学习之概念
这一章,我们先介绍几个 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 呢?
原因:
- 保存不同类型的 document 对程序员来说是个噩梦,因为我们做某些查询的时候,程序员必须确定返回的值里只有 A 类型的 document,这时清除不要的数据会很麻烦。
- 查询速度。
- 建立索引。
Databases
每个数据库都有它的权限,并且作为一个单独的文件存放在硬盘上。
数据库名字命名规则:
- 不能以空 “” 作为数据库名字
- 不能包含字符
:/,\,.,",*,<,>,:,|,?,$,
一个单独的空格\0
。 - 数据库名字大小写敏感,建议都用小写字符
- 数据库名字最大 64 位。
- 数据库名字有保留字,有特殊意义(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 技术交流群。
上一篇: MongoDB 学习之基本操作
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论