1、MongoDB概述
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
2、NoSQL概述
2.1、什么是NoSQL
NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
2.2、NoSQL优缺点
优点
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点
- 没有标准化
- 有限的查询功能
3、MongoDB术语
3.1、MongoDB和MySQL术语对照
MySQL术语 | MongoDB术语 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
3.2、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 | 正则表达式类型。用于存储正则表达式。 |
4、MongoDB 操作
4.1、连接远程服务器的MongoDB数据库
mongo 123.206.190.194:27017/account_service -u root -p mYmongo$%123 --authenticationDatabase=admin
- ip:port/db_name:指明远程服务器的ip地址、端口号、数据库名称
- -u:指明数据库的用户名
- -p:指明数据库的密码
4.2、数据库(table)及集合(collection)说明
数据库
本篇文章所用的MongoDB数据库名称为account_service
集合
本篇文章所用的MongoDB数据库集合名称为company
集合结构
本篇文章所使用的company集合的结构如下:
{
"_id" : ObjectId,
"source" : String,
"name" : String,
"mobile" : String,
"password" : String,
"license_no" : String,
"active" : String,
"xd_active" : String,
"frw_active" : String,
"allow_borrow" : String,
"merchant_id" : Array,
"last_login_ip" : String,
"last_login_at" : String,
"updated_at" : Date,
"created_at" : Date
"ec_customer_id" : String
}
4.3、数据导出
mongoexport -h 123.206.190.194 -u root -p mYmongo$%123 --authenticationDatabase=admin --authenticationMechanism=SCRAM-SHA-1 --port 27017 -d account_service -c company --type=csv -f _id,name,mobile,show_count,last_login_at,active -q "{'source':'3','last_login_at':{$gt:'2018-07-11 17:08:05'}}" -o ./company.csv
- -h:指明数据库宿主机的IP
- -u:指明数据库的用户名
- -p:指明数据库的密码
- --port:指明端口号
- -d:指明数据库的名字
- -c:指明collection的名字
- --type:指明要导入的文件格式
- -f:指明要导出那些列
- -q:指明导出数据的过滤条件
- -o:指明要导出的文件名
- --authenticationDatabase:指明保存用户凭证的数据库
- --authenticationMechanism:指明身份验证机制
中文乱码解决方案:使用记事本打开company.csv,执行“另存为”操作,选择“编码”为“UTF-8”。
5、查询
5.1、MongoDB与MySQL简单查询对比
操作 | MongoDB格式 | MongoDB示例 | MySQL示例 |
---|---|---|---|
等于 | {<key>:<value>} | db.getCollection('company').find({"source":"3"}) | where source = '3' |
小于 | {<key>:{$lt:<value>}} | db.getCollection('company').find({"last_login_at":{$lt:"2018-07-10 17:08:05"}})) | where last_login_at < "2018-07-10 17:08:05" |
大于 | {<key>:{$gt:<value>}} | db.getCollection('company').find({"last_login_at":{$gt:"2018-07-10 17:08:05"}})) | where last_login_at > "2018-07-10 17:08:05" |
小于或等于 | {<key>:{$lte:<value>}} | db.getCollection('company').find({"last_login_at":{$lte:"2018-07-10 17:08:05"}})) | where last_login_at <= "2018-07-10 17:08:05" |
大于或等于 | {<key>:{$gte:<value>}} | db.getCollection('company').find({"last_login_at":{$gte:"2018-07-10 17:08:05"}})) | where last_login_at >= "2018-07-10 17:08:05" |
不等于 | {<key>:{$ne:<value>}} | db.getCollection('company').find({"source":{$ne:"3"}}) | where source != "3" |
and(且) | {<key>:<value>},{<key>:<value>} | db.getCollection('company').find({"source":"5","last_login_at":{$gt:"2018-07-10 00:00:00"}}) | where source = "3" or source = "5" and last_login_at > "2018-07-10 00:00:00" |
or(或) | {$or:[{<key>:<value>},{<key>:<value>}]} | db.getCollection('company').find({$or:[{"source":"3"},{"source":"5"}]}) | where source = "3" or source = "5" |
and 联合 or | {<key>:<value>,$or:[{<key>:<value>},{<key>:<value>}]} | db.getCollection('company').find({"source":"5",$or:[{"last_login_at":{$gt:"2018-07-10 00:00:00"}},{"last_login_at":{$lt:"2018-06-20 00:00:00"}}]}) | where source = 5 and (last_login_at > "2018-07-10 00:00:00" or last_login_at < "2018-06-20 00:00:00") |
5.2、过滤导出的数据-示例
基础命令
mongoexport -h 123.206.190.194 -u root -p mYmongo$%123 --authenticationDatabase=admin --authenticationMechanism=SCRAM-SHA-1 --port 27017 -d account_service -c company --type=csv -f _id,name,mobile,show_count,last_login_at,active -o ./company.csv
以下命令,都是基于该命令的,即,将下列命令添加基础命令,便组成了完成的条件过滤导出命令。
导出 source 等于 3 的所有数据
-q "{'source':'3'}"
导出 last_login_at 大于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$lt:'2018-07-10 17:08:05'}}"
导出 last_login_at 小于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$gt:'2018-07-10 17:08:05'}}"
导出 last_login_at 小于或等于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$lte:'2018-07-10 17:08:05'}}"
导出 last_login_at 大于或等于 2018-07-10 17:08:05 的所有数据
-q "{'last_login_at':{$gte:'2018-07-10 17:08:05'}}"
导出 source 不等于 3 的所有数据
-q "{'source':{$ne:'3'}}"
导出 source 等于 5 且 last_login_at 大于 2018-07-10 00:00:00 的所有数据
-q "{'source':'5','last_login_at':{$gt:'2018-07-10 00:00:00'}}"
导出 source 等于 3 或 source 等于 5 的所有数据
-q "{$or:[{'source':'3'},{'source':'5'}]}"
导出 source 等于 5 并且 last_login_at 大于 2018-07-10 00:00:00 或 last_login_at 小于 2018-06-20 00:00:00 的所有数据
-q "{'source':'5',$or:[{'last_login_at':{$gt:'2018-07-10 00:00:00'}},{'last_login_at':{$lt:'2018-06-20 00:00:00'}}]}"