【MongoDB】初始 MongoDB

原创
2018/10/21 11:53
阅读数 545

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'}}]}"
展开阅读全文
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部