MongoDB
MongoDB下载安装
MongoDB 源码下载地址:https://www.mongodb.com/try/download/enterprise
将源压缩包上传到linux服务器,并解压到/usr/local/mongodb4目录下
# 创建 /usr/local/mongodb4 目录mkdir /usr/local/mongodb4# 解压 mongodb 到上面的目录tar -zxvf mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 .tgz -C /usr/local/mongodb4
# 打开 /etc/profile 配置文件,在最下面添加路径配置vi /etc/profile# 在 profile 中配置 mongodb 可执行脚本的路径export PATH=/usr/local/mongodb4/mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 /bin:$PATH
配置完成后,使文件配置生效
source /etc/profile
创建数据库目录
/var/lib/mongodb
/var/log/mongodb
我们在启动前可以先创建这两个目录并设置当前用户有读写权限:
mkdir -p /var/lib/mongodbmkdir -p /var/log/mongodbchown `whoami` /var/lib/mongodb # 设置权限chown `whoami` /var/log/mongodb # 设置权限
接下来启动 Mongodb 服务:
#首先安装net-snmpyum install net-snmp启动服务mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --fork
打开 /var/log/mongodb/mongod.log 文间有信息,说明启动成功。
tail -10f /var/log/mongodb/mongod.log
MongoDB 初步使用
[root@localhost ~]# mongoMongoDB shell version v4.2.8connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodbImplicit session: session { "id" : UUID("2cfdafc4-dd56-4cfc-933a-187b887119b3") }MongoDB server version: 4.2.8Welcome to the MongoDB shell.……
如果要停止 mongodb 可以使用以下命令:
mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb/mongod.log --shutdown
也可以在 mongo 的命令出口中实现:
> use adminswitched to db admin> db.shutdownServer()
使用配置文件的方式启动mongodb
# 在 mongodb 根目录,创建 conf 目录,并在下面创建 mongodb.conf 文件[root @localhost ~]# mkdir /usr/local/mongodb4/mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 /conf# 创建配置文件[root @localhost ~]# vi /usr/local/mongodb4/mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 /conf/mongodb.conf
配置文件内容
#master配置
#数据存放路径 dbpath=/var/lib/mongodb
#日志存放路径 logpath=/var/log/mongodb/mongodb.log
#以追加的方式记录日志 logappend=true
#mongodb进程所绑定的ip地址 bind_ip=192.168.48.150
#端口号 port=27017
#以后台方式运行进程 fork=true
使用配置文件的方式启动mongodb
# 进入到 mongodb 根目录,然后通过 -f 指定配置文件,启动服务器端[root @localhost mongodb-linux-x86_64-enterprise-rhel70- 4.2.23 ]# mongod -f ./conf/mongodb.conf# 查看进程ps -ef | grep mongod # 查看 mongod 状态# 启动 mongo 客户端连接服务器mongo # 通过命令 mongo 启动 mongodb 服务器
MongoDB相关概念
SQL术语/概念
|
MongoDB术语/概念
|
解释/说明
|
---|---|---|
database
|
database
|
数据库
|
table
|
collection
|
数据库表/集合
|
row
|
document
|
数据记录行/文档
|
column
|
field
|
数据字段/域
|
index
|
index
|
索引
|
table joins
|
表连接,MongoDB不支持
| |
primary key
|
primary key
|
主键,MongoDB自动将_id字段设置为主键
|
数据库
"show dbs" 命令可以显示所有数据的列表。
$ ./mongoMongoDB shell version: 3.0.6connecting to: test> show dbslocal 0.078GBtest 0.078GB>
执行 "db" 命令可以显示当前数据库对象或集合
$ ./mongoMongoDB shell version: 3.0.6connecting to: test> dbtest>
运行"use"命令,可以连接到一个指定的数据库。
> use localswitched to db local> dblocal>
以上实例命令中,"local" 是你要链接的数据库。
文档(Document)
{"site":"www.baidu.com", "name":"百度"}
下表列出了 RDBMS 与 MongoDB 对应的术语:
RDBMS | MongoDB |
数据库
|
数据库
|
表格
|
集合
|
行
|
文档
|
列
|
字段
|
表联合
|
嵌入文档
|
主键
|
主键 (MongoDB 提供了 key 为 _id )
|
数据库服务和客户端
| |
Mysqld/Oracle
|
mongod
|
mysql/sqlplus
|
mongo
|
{"site":"www.baidu.com"}{"site":"www.google.com","name":"Google"}{"site":"www.baidu.com","name":"百度 ","num":5}
capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。
db.createCollection("mycoll", {capped:true, size:100000})
MongoDB 数据类型
下表为MongoDB中常用的几种数据类型。
数据类型 | 描述 |
---|---|
String
|
字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
|
Integer
|
整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64位。
|
Boolean
|
布尔值。用于存储布尔值(真/假)。
|
Double
|
双精度浮点值。用于存储浮点值。
|
Min/Max keys
|
将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
|
Array
|
用于将数组或列表或多个值存储为一个键。
|
Timestamp
|
时间戳。记录文档修改或添加的具体时间。
|
Object
|
用于内嵌文档。
|
Null
|
用于创建空值。
|
Symbol
|
符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采
用特殊符号类型的语言。
|
Date
|
日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的
日期时间:创建 Date 对象,传入年月日信息。
|
Object ID
|
对象 ID。用于创建文档的 ID。
|
Binary Data
|
二进制数据。用于存储二进制数据。
|
Code
|
代码类型。用于在文档中存储 JavaScript 代码。
|
Regular
expression
|
正则表达式类型。用于存储正则表达式。
|
ObjectId
ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:
MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象
> var newObject = ObjectId()> newObject.getTimestamp()ISODate("2017-11-25T07:21:10Z")
ObjectId 转为字符串
> newObject.str5a1919e63df83ce79df8b38f
字符串
BSON 字符串都是 UTF-8 编码。
> var mydate1 = new Date() // 格林尼治时间> mydate1ISODate("2018-03-04T14:58:51.233Z")> typeof mydate1object> var mydate2 = ISODate() // 格林尼治时间> mydate2ISODate("2018-03-04T15:00:45.479Z")> typeof mydate2object
> var mydate1str = mydate1.toString()> mydate1strSun Mar 04 2018 14:58:51 GMT+0000 (UTC)> typeof mydate1strstring
或者
> Date()Sun Mar 04 2018 15:02:59 GMT+0000 (UTC)
MongoDB数据库操作
创建数据库
MongoDB 创建数据库的语法格式如下:
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
删除数据库
MongoDB 删除数据库的语法格式如下:
db.dropDatabase()
删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。
删除集合
db.collection.drop()
MongoDB集合操作
创建集合(类似于mysql中的创建表)
db.createCollection(name, options)
字段 | 类型 | 描述 |
---|---|---|
capped
|
布尔
|
(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
当该值为 true 时,必须指定 size 参数。
|
autoIn
dexId
|
布
尔
|
3.2 之后不再支持该参数。
(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
|
size
|
数
值
|
(可选)为固定集合指定一个最大值,即字节数。
如果 capped 为 true,也需要指定该字段。
|
max
|
数
值
|
(可选)指定固定集合中包含文档的最大数量。
|
删除集合
db.collection.drop()
插入文档
db.COLLECTION_NAME.insert(document)或db.COLLECTION_NAME.save(document)
3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()。
db.collection.insertOne() 用于向集合插入一个新文档,语法格式如下:
db.collection.insertOne(<document>,{writeConcern: <document>} )
db.collection.insertMany() 用于向集合插入一个多个文档,语法格式如下:
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],{writeConcern: <document>,ordered: <boolean>})
更新文档
db.collection.update(
<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>})
如果你要修改多条相同的文档,则需要设置 multi 参数为 true。
save() 方法
save() 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入。语法格式如下:
db.collection.save(<document>,{writeConcern: <document>})
删除文档
MongoDB remove() 函数是用来移除集合中的数据。
db.collection.remove(<query>,<justOne>)
如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:
db.collection.remove(<query>,{justOne: <boolean>,writeConcern: <document>})
查询文档
db.collection.find(query, projection)
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
>db.col.find().pretty()
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于
|
{<key>:<value>}
|
db.col.find({"by":"菜鸟教
程"}).pretty()
|
where by = '菜鸟
教程'
|
小于
|
{<key>:{$lt:<value>}}
|
db.col.find({"likes":
{$lt:50}}).pretty()
|
where likes < 50
|
小于或
等于
|
{<key>:{$lte:
<value>}}
|
db.col.find({"likes":
{$gt:50}}).pretty()
|
where likes > 50
|
大于或
等于
|
{<key>:{$gte:
<value>}}
|
db.col.find({"likes":
{$gte:50}}).pretty()
|
where likes >=50
|
大于
|
{<key>:{$gt:
<value>}}
|
db.col.find({"likes":
{$gt:50}}).pretty()
|
where likes > 50
|
不等于
|
{<key>:{$ne:
<value>}}
|
db.col.find({"likes":
{$ne:50}}).pretty()
|
where likes != 50
|
MongoDB AND 条件
>db.col.find({key1:value1, key2:value2}).pretty()
MongoDB OR 条件
>db.col.find({$or: [{key1: value1}, {key2:value2}]}).pretty()
>db.col.find({"likes": {$gt:50}, $or: [{"by": " 菜鸟教程 "},{"title": "MongoDB 教程 "}]}).pretty(){"_id" : ObjectId("56063f17ade2f21f36b03133"),"title" : "MongoDB 教程 ","description" : "MongoDB 是一个 Nosql 数据库 ","by" : " 菜鸟教程 ","url" : "http://www.runoob.com","tags" : ["mongodb","database","NoSQL"],"likes" : 100}
条件操作符
db.col.remove({})
MongoDB (>) 大于操作符 - $gt
db.col.find({likes : {$gt : 100}})
MongoDB(>=)大于等于操作符 - $gte
db.col.find({likes : {$gte : 100}})
db.col.find({likes : {$lt : 150}})
db.col.find({likes : {$lte : 150}})
db.col.find({likes : {$lt :200, $gt : 100}})