一些概念
- MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限
- 每一个文档都有一个特殊的键"_id",它在文档所处的集合中是唯一的
文档
文档是MongoDB中数据的基本单元,类似于关系数据库中的行。多个键及其关联的值有序地放置在一起便是文档。 例如:{"greeting": "hello, ele~", "foo":3} 1. 文档中的键/值对是有序的。 2. 文档不但区分类型,也区分大小写 3. 文档不能有重复的键
集合
集合就是一组文档,可以被看做没有模式的表 1. 集合是无模式的,因此一个集合里面的文档可以使各种各样的。 2. 可以用名字来标识集合 * 组织集合的一种惯例是使用“.”字符分开的按命名空间划分的子集合
数据类型
- null
- 布尔(true/false)
- 32位整数、64位整数、64位浮点数
- 字符串、符号
- 对象id: {"x": ObjectId()}
- "_id"的默认类型
- 使用12字节的存储空间。前4个字节是从标准纪元开始的时间戳,接下来的3字节是所在主机的唯一标识符,接下来的2字节来自产生ObjectId的进程标识符。这9个字节保证了同一秒钟不同机器不同进程产生的ObjectId是唯一的。最后3个字节是一个自动增加的计数器,确保相同进程同一秒产生的ObjectId也是不一样的。
- 日期: {"x": new Date()}
- 正则表达式
- 代码
- 二进制数据
- 最大值、最小值
- 未定义:{"x": undefined}
- 数组: {"x": ["a", "b", "c"]}
- 内嵌文档:{"x": {"foo": "bar"}}
安装与启动
安装(Windows)
step 1 MongoDB官网上直接选择对应的版本即可。 step 2 下载后解压
启动(Windows)
step 1 新建目录:E:\data\db
这里,由于我的MongoDB是解压在E盘的,所以在E盘创建此目录。
* 注意,若此目录不存在或者不可写,会导致启动失败。
step 2 进入MongoDB解压路径后, CMD窗口执行:.\bin>mongod.exe
运行MongoDB shell
.\bin>mongo
* 由于shell会在启动时自动连接MongoDB服务器,因此在使用shell之前需确保mongod已正常启动。 * 启动后,shell会连到MongoDB服务器的test数据库,并将这个数据库连接赋值给全局变量db * 选择使用的数据库 1
2
3
4
5
6> db
test
> use foobar
switched to db foobar
> db
foobar1
2
3
4
5
6
7
8
9
10
11
12# 创建一个局部变量post
> post = {"title":"My Blog",
... "content":"Here is my blog post.",
... "date":new Date()}
{
"title" : "My Blog",
"content" : "Here is my blog post.",
"date" : ISODate("2015-11-10T12:32:12.975Z")
}
# 将post保存到blog集合中
> db.blog.insert(post)
WriteResult({ "nInserted" : 1 })1
2
3
4
5
6
7
8
9
10
11# 调用集合的find方法查看所有文档
> db.blog.find()
{ "_id" : ObjectId("5641e3d7245065418bab4329"), "title" : "My Blog", "content" : "Here is my blog post.", "date" : ISODate("2015-11-10T12:32:12.975Z") }
# 查看集合中的一个文档
> db.blog.findOne()
{
"_id" : ObjectId("5641e3d7245065418bab4329"),
"title" : "My Blog",
"content" : "Here is my blog post.",
"date" : ISODate("2015-11-10T12:32:12.975Z")
}1
2
3
4
5
6
7
8> post.comments = []
[ ]
# updaet接受至少两个参数:第一个是要更新文档的限定条件,第二个是新的文档
> db.blog.update({title:"My Blog"}, post)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.find()
{ "_id" : ObjectId("5641e3d7245065418bab4329"), "title" : "My Blog", "content" : "Here is my blog post.", "date" : ISODate("2015-11-10T12:32:12.975Z"), "comments" : [ ] }
>1
2
3
4
5
6
7# remove用来永久性删除文档
# 如果参数是一个空的字典,会删除一个集合内的所有文档
# remove也可以接受一个文档以指定限定条件
> db.blog.remove({title:"My Blog"})
WriteResult({ "nRemoved" : 1 })
> db.blog.find()
>1
2
3
4
5
6
7
8
9
10
11 查看shell的帮助
help
查看数据库级别的命令的帮助
db.help()
查看集合相关的帮助
db.foo.help()
了解函数功能
db.foo.update
当有属性与目标集合同名时,可以使用getCollection函数
db.getCollection("version")
foobar.version