MongoDB是一个高可用,高性能和自动扩展的开源的分布式面向文档的数据库。
核心概念
文档
文档是MongoDB中的数据的基本单元,类似关系型数据库中表中的行。它是由键值对组成的类似JSON格式的数据,例如:
{"id": 1, "name": "test"}
集合
集合由多个文档构成,类似关系听数据库中的表。与表不同的是,集合是无模式的,也就是说集成中可以存放不同格式的文档。
集合可以包含子集合,使用“.”字符来划分子集合。
数据库
多个集合可以组成一个独立的数据库,类似关系型数据库中的schema。一个MongoDB实例可以包含多个数据库,与关系型数据库类似。
支持的数据类型
MongoDB支持如下数据类型:
- String, UTF-8的字符串
- Integer, 32位和64位整数
- Boolean, 布尔值,true或者false
- Double, 64为浮点数
- Arrays, 数组
- Timestamp,时间戳
- Object,内嵌文档对象
- null,空值
- Symbol,符号类型
- Object ID,对象ID,12字节的唯一ID
- Binary Data,二进制数据
- Code,代码类型,可以包含JavaScript代码
- Regular Expression,正则表达式类型,JavaScript的正则语法
安装MongoDB
在Mac下使用brew来安装MongoDB。命令如下:
brew install mongodb
启动MongoDB实例之前,请先创建MongoDB默认的数据库数据存放目录:/data/db
,并确认是否有读写权限。然后直接运行mongod
来启动MongoDB。如果成功启动,将会看到如下信息:
2016-04-23T17:29:32.610+0800 I NETWORK [initandlisten] waiting for connections on port 27017
基本操作
通过MongoDB Shell来连接MongoDB实例执行管理操作。使用如下命令mongo
来连接本地启动的数据库。如果需要连接远程的MongoDB实例,需要使用
mongo mongodb://{username}:{password}@{ip:port}/{db}
的格式来连接,其中username为用户名,password为密码,ip为远程主机的IP,port为MongoDB的连接端口,db为要连接的数据库。
数据库管理
查看当前MongoDB实例中的数据库
show dbs
创建数据库
如果该数据库不存在,则创建数据库;如果该数据库存在,则切换数据库。命令如下:
use test
删除数据库
先使用use
命令切换到要删除的数据库下,使用如下命令来删除:
db.dropDatabase()
文档的增删改查
创建文档
使用如下命令来创建文档:
db.collection.insert(document)
其中collection为集合的名称,document为json格式的字符串。例如给blog创建一个post信息:
db.blog.insert({
"title": "MongoDB简单入门"
, "author": "Circle Wu"
, "content": "blog content"
})
那么就在blog集合中创建一个文档。
删除文档
使用如下命令来删除文档:
db.collection.remove(query)
其中collection为集合名称,query为删除文档的条件,例如:{"autor": "Circle Wu"}
。例如删除上面创建的文档:
db.blog.remove({"autor": "Circle Wu"})
更新文档
使用如下命令来更新文档:
db.collection.update(query, document)
例如更新上面创建的文档:
db.blog.update({"title": "MongoDB简单入门"}, {
"title": "MongoDB简单入门"
, "author": "Circle Wu"
, "Content": "Long Long ago"
})
查询文档
使用如下命令来查询文档:
db.collection.findOne(query)
db.collection.find(query)
findOne只返回query限定条件的一个结果,find返回全部结果。例如查询上面创建的文档:
db.blog.find()
条件语句
等于
{<key>:<value>}
小于
{<key>:{$lt:<value>}}
小于或等于
{<key>:{$lte:<value>}}
大于
{<key>:{$gt:<value>}}
大于或等于
{<key>:{$gte:<value>}}
不等于
{<key>:{$ne:<value>}}
and
{<key1>:<value1>, <key2>:<value2>}
or
{$or: [{key1: value1}, {key2:value2}]}
查看帮助
数据库级别的帮助命令
直接使用help命令来查看数据库级别的帮助命令
help
集合级别的帮助命令
使用如下命令来查看集合级别的帮助命令:
db.collection.help()