MongoDB
MongoDB 是一个基于分布式文件存储的数据库. 由 C++ 语言编写, 它是一个介于关系数据库和非关系数据库之间的产品, 是非关系数据库当中功能最丰富, 最像关系数据库的.
MongoDB 概念解析
SQL 术语 / 概念 | MongoDB 术语 / 概念 | 解释 / 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表 / 集合 |
row | document | 数据记录行 / 文档 |
column | field | 数据字段 / 域 |
index | index | 索引 |
table joins | 表连接, MongoDB 不支持 | |
primary key | primary key | 主键, MongoDb 自动将_id 字段设置为主键 |
安装 MongoDB
MongoDB 提供了 Linux 各发行版本 64 位的安装包, 你可以在官网下载安装包.
下载地址: https://www.mongodb.com/download-center#community
下载完安装包, 并解压 tgz
- curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz # 下载
- tar -zxvf MongoDB-Linux-x86_64-3.0.6.tgz # 解压
- mv MongoDB-Linux-x86_64-3.0.6/ /usr/local/MongoDB # 将解压包拷贝到指定目录
- export PATH=<MongoDB-install-directory>/bin:$PATH #MongoDB 的可执行文件位于 bin 目录下, 所以可以将其添加到 PATH 路径中:
创建数据库目录
MongoDB 的数据存储在 data 目录的 db 目录下, 但是这个目录在安装过程不会自动创建, 所以你需要手动创建 data 目录, 并在 data 目录中创建 db 目录..
注意:/data/db 是 MongoDB 默认的启动的数据库路径(--dbpath)
mkdir -p /data/db
启动 MongoDB 服务器
输入命令, 回车
- cd /usr/local/MongoDB/bin/
- mongod --dbpath /data/db
MongoDB 服务启动成功, 如图
image
启动 MongoDB 服务器后, 我们启动一个终端连接到 MongoDB 服务器.(xshell 重新打开一个窗口)
连接 MongoDB 服务器命令的语法如下
mongo server_ip:port/dbname -u user -p password
因为这里我连接的是本地服务器, 直接输入 mongo, 即可进行 shell 后台, 可进行数据库的 CURD 操作.
image
MongoDB 的 crud
1.MongoDB 创建数据库
MongoDB 创建数据库的语法格式如下:
use database_name
如果数据库不存在, 则创建数据库, 否则切换到指定数据库.
image
如图创建了 huaxiao 的数据库, 但是在使用 show dbs 命令时, 并没有看到数据库存在, 这是因为该数据库中还没有数据. 要显示它, 我们需要向数据库插入一些数据.
2. 删除数据库
MongoDB 删除数据库的语法格式如下:
db.dropDatabase()
接下来我们切换到数据库 huaxiao, 执行删除操作:
- > use huaxiao
- switched to db huaxiao
- > show dbs
- huaxiao 0.078GB
- local 0.078GB
- > db.dropDatabase()
- {
- "dropped" : "huaxiao", "ok" : 1
- }
- > show dbs
- local 0.078GB
- >
3.MongoDB 创建表(集合)
MongoDB 中使用 createCollection() 方法来创建集合.
db.createCollection(name, options)
参数说明:
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
下图创建了一个数据库 huaxiao, 创建了礼物集合 gift
image
4. 删除表(集合)
集合删除语法格式如下:
db.collection.drop()
以下实例删除了集合 gift:
- > show tables;
- gift
- system.indexes
- > db.gift.drop()
- true
- > show tables;
- system.indexes
- >
5.MongoDB 插入文档
MongoDB 使用 insert() 或 save() 方法向集合中插入文档, 语法如下:
db.collection.insert(document)
以下文档可以存储在 MongoDB 数据库 的 gift 集合中:
image
6.MongoDB 查询文档
MongoDB 查询数据的语法格式如下:
db.collection.find(query, projection)
参数说明:
query : 可选, 使用查询操作符指定查询条件
projection : 可选, 使用投影操作符指定返回的键. 查询时返回文档中所有键值, 只需省略该参数即可(默认省略).
如果你需要以易读的方式来读取数据, 可以使用 pretty() 方法, 语法格式如下:
db.collection.find(query, projection).pretty()
以下实例我们查询了集合 col 中的数据:
- db.gift.find().pretty();
- {
- "_id" : ObjectId("5d1951a6659f4eaa30bac84f"),
- "id" : "1",
- "name" : "守护之心",
- "price" : "10"
- }
7.MongoDB 删除文档
remove() 方法的基本语法格式如下所示:
- db.collection.remove(
- <query>,
- {
- justOne: <boolean>,
- writeConcern: <document>
- }
- )
参数说明:
query :(可选)删除的文档的条件.
justOne : (可选)如果设为 true 或 1, 则只删除一个文档, 如果不设置该参数, 或使用默认值 false, 则删除所有匹配条件的文档.
writeConcern :(可选)抛出异常的级别.
我们移除 name 为 '守护之心' 的文档:
- > db.gift.remove({
- 'name':'守护之心'
- })
- WriteResult({
- "nRemoved" : 1
- })
如果你只想删除第一条找到的记录可以设置 justOne 为 1, 如下所示:
db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)
8.MongoDB 更新文档
update() 方法用于更新已存在的文档. 语法格式如下:
- db.collection.update(
- <query>,
- <update>,
- {
- upsert: <boolean>,
- multi: <boolean>,
- writeConcern: <document>
- }
- )
参数说明:
query : update 的查询条件, 类似 sql update 查询内 where 后面的.
update : update 的对象和一些更新的操作符 (如inc...) 等, 也可以理解为 sql update 查询内 set 后面的
upsert : 可选, 这个参数的意思是, 如果不存在 update 的记录, 是否插入 objNew,true 为插入, 默认是 false, 不插入.
multi : 可选, MongoDB 默认是 false, 只更新找到的第一条记录, 如果这个参数为 true, 就把按条件查出来多条记录全部更新.
writeConcern : 可选, 抛出异常的级别.
我们在集合 gift 中插入如下数据:
- >db.gift.insert({
- "id" : "1",
- "name" : "守护之心",
- "price" : "10"
- })
接着我们通过 update() 方法来更新礼物价格(price), 并查看, 更新成功:
- > db.gift.update({'id':'1'},{$set:{'price':'888'}})
- WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
- > db.gift.find().pretty()
- {
- "_id" : ObjectId("5d1a9e46b35668bf92c989e3"),
- "id" : "1",
- "name" : "守护之心",
- "price" : "888"
- }
- >
参考资料
MongoDB Tutorials - MongoDB Manual 3.4
菜鸟教程: https://www.runoob.com/mongodb/mongodb-tutorial.html
来源: http://www.jianshu.com/p/79b7fa5777a0