MongoDB学习

2020-05-19  本文已影响0人  Sachin猿人

MongoDB学习文档

作者 sachinly

MongoDB 简单介绍

MangoDB 是由C++编写的分布式文件存储的开源数据库系统。在高负载情况下,可以添加更多的节点,从而保证服务器的性能。

MongoDB主要特点

MongoDB Linux 安装

  1. Ubuntu 在线安装

wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

sudo apt-get update

sudo apt-get install mongodb-org

  1. 离线安装

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.2.6.tgz

sudo apt-get install libcurl4 openssl

tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.2.6.tgz
sudo cp mongodb-linux-x86_64-ubuntu1804-4.2.6/bin/* /usr/local/bin/

sudo mkdir -p /var/lib/mong
sudo mkdir -p /var/log/mongodb
sudo chown whoami /var/lib/mongo # Or substitute another user
sudo chown whoami /var/log/mongodb # Or substitute another user

sudo touch /etc/mongos.conf

在配置文件`/etc/mongos.conf`添加如下内容

      # Where and how to store data.
      storage:
        dbPath: /var/lib/mongodb
        journal:
          enabled: true
      #  engine:
      #  mmapv1:
      #  wiredTiger:

      # where to write logging data.
      systemLog:
        destination: file
        logAppend: true
        path: /var/log/mongodb/mongod.log

      # network interfaces
      net:
        port: 27017
        bindIp: 127.0.0.1

      # how the process runs
      processManagement:
        timeZoneInfo: /usr/share/zoneinfo
  1. 控制和自启动

sudo systemctl start mongod

sudo systemctl stop mongod

sudo systemctl status mongod

sudo systemctl enable mongod

  1. 测试

mongo

如下显示

    MongoDB shell version v4.2.6
    connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("dfa3b6d1-43e4-4555-a6a7-015415baeaca") }
    MongoDB server version: 4.2.6
    Server has startup warnings:
    2020-05-18T10:01:52.767+0800 I  STORAGE  [initandlisten]
    2020-05-18T10:01:52.767+0800 I  STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
    2020-05-18T10:01:52.767+0800 I  STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
    2020-05-18T10:01:53.922+0800 I  CONTROL  [initandlisten]
    2020-05-18T10:01:53.923+0800 I  CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
    2020-05-18T10:01:53.923+0800 I  CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
    2020-05-18T10:01:53.923+0800 I  CONTROL  [initandlisten]
    ---
    Enable MongoDB's free cloud-based monitoring service, which will then receive and display
    metrics about your deployment (disk utilization, CPU, operation statistics, etc).

    The monitoring data will be available on a MongoDB website with a unique URL accessible to you
    and anyone you share the URL with. MongoDB may use this information to make product
    improvements and to suggest MongoDB products and deployment options to you.
    To enable free monitoring, run the following command: db.enableFreeMonitoring()
    To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
    ---

    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
  1. 卸载

sudo service mongod stop

sudo apt-get purge mongodb-org*

sudo rm -r /var/log/mongodb
sudo rm -r /var/lib/mongodb
sudo rm /etc/mongos.conf

MongoDB 概念解析

在任何服务或者软件中首先要了解其概念名词术语

SQL术语 MongoDB术语 解释说明
database database 数据库/数据库
table collections 表/集合
row document 数据记录/文档
column field 数据字段/域
index index 索引/索引
table join —— 表连接/mongoDB不支持
primary key primary key 主键/mongoDB自动将_id域作为索引
  1. 数据库
    MongoDB 可创建多个独立的数据库,admin local config 是系统默认保留的数据库。数据库名最大支持64个字符,应全部小写。

  2. 集合
    MongoDB中的文档相当于关系型数据库的表。集合存于数据库中,集合没有固定的结构,意味着可以插入不同格式不同类型的数据,通常情况下集合中的数据是有一定的关联性。当文档数据插入数据库时,集合就会被创建。集合名称不能以'system'开头,system是系统集合保留的前缀名。

  3. 文档
    文档是一组键值对,MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的类型。这是与关系型数据库最大的区别,也是mongoDB的突出特点。

  4. 数据类型如下表

类型 描述
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 正则表达式类型。用于存储正则表达式。

MongoDB远程连接配置

  1. 添加管理员用户

mongo

      > use admin
      > db.createUser(
        {         
          user: "admin",
          pwd: "Admin@123",
          roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
        }
      )

Mongodb 内置角色介绍

数据库用户角色  
  - read: 只读数据权限
  - readWrite:读写数据权限
数据库管理角色  
  - dbAdmin: 在当前db中执行管理操作的权限
  - dbOwner: 在当前db中执行任意操作
  - userADmin: 在当前db中管理user的权限
备份和还原角色   
  - backup
  - restore
夸库角色  
  - readAnyDatabase: 在所有数据库上都有读取数据的权限
  - readWriteAnyDatabase: 在所有数据库上都有读写数据的权限
  - userAdminAnyDatabase: 在所有数据库上都有管理user的权限
  - dbAdminAnyDatabase: 管理所有数据库的权限
集群管理  
  - clusterAdmin: 管理机器的最高权限
  - clusterManager: 管理和监控集群的权限
  - clusterMonitor: 监控集群的权限
  - hostManager: 管理Server
超级权限  
  - root: 超级用户
  1. 数据库添加用户

    mongo

          > use dbname
          > db.createUser(
            {         
              user: "dbuser",
              pwd: "dbuser@123",
              roles: [ { role: "readWrite", db: "dbname" } ]
            }
          )
    
  2. 修改配置文件

vim /etc/mongod.conf

  ```
      storage:
        dbPath: /var/lib/mongodb
        journal:
          enabled: true
      #  engine:
      #  mmapv1:
      #  wiredTiger:
      systemLog:
        destination: file
        logAppend: true
        path: /var/log/mongodb/mongod.log
      net:
        port: 27017
        bindIp: 127.0.0.1
      processManagement:
        timeZoneInfo: /usr/share/zoneinfo
      security:
        authorization: enabled
      #operationProfiling:
      #replication:
      #sharding:
      ## Enterprise-Only Options:
      #auditLog:
      #snmp:
  ```
  修改`security` 标签下的`authorization` 为`enabled` 即开启认证。然后重启服务
  修改`net` 标签下的`port` 端口和`bindIp`地址,允许远程访问修改为`0.0.0.0` 本地访问`127.0.0.1`
  1. 删除用户

首先修改配置文件,即注释掉 security 下的authorization 然后重启

mongo

    > use dbname
    > db.dropUser("dbuser")

MongoDB客户端连接

使用用户名和密码连接到远程的指定数据库上
mongodb://username:password@host/dbname
分布式的在其他章节介绍

python3 连接 MongoDB Server

pip3 install pymongo

#!/usr/bin/python3

import pymongo

myclient = pymongo.MongoClient("mongodb://dbuser:dbuser@123@127.0.0.1/dbname")
mycol = myclient["col_test"]

MongoDB 数据库、文档、集合的创建删除

  1. 数据库

use dbname #如果数据库不存在则创建,如果数据库存在则切换到该数据库。
show dbs #列出所有数据库,只有数据库有内容数据库才会被真正的创建,如果是空数据库要想被显示,则需要插入数据。
db.dbcol.insert({"key":"value"}) #自动创建集合dbcol 并插入数据

use dbname
db.dropDatabase()

若数据库中没有集合没有数据,数据库会自动删除

  1. 集合

db.createCollection(colname, options)

`colname`是集合名称,`options`是选项

db.colname.drop()

show collections 可列出当前数据库下所有的集合colname是集合名称
options 说明

字段 类型 描述
capped Boolean 是否创建固定集合,如果是必须指定固定集合大小size
autoIndexId Boolean 是否自动在_id 上创建索引,默认是false
size Integer 固定集合指定的最大值,单位是KB
max Integer 固定集合的文档的最大数量

插入文档时,MongoDB先检查size 然后检查max,若达到最大值,新插入的就会覆盖最旧的文档

  1. 文档
    文档的数据结构和JSON基本一样,所有存储在集合的数据都是BSON格式,BSON就是Binary Json

db.COLLECTION_NAME.insert(document)

db.collection.insertOne()db.collection.insertMany()分别是一次插入一个和多个

db.colname.insert({
  "title":"mogo",
  "msg":{"aa","bbb"}
  })
db.colname.remove({"title":"mogo"})

此处的{"title":"mogo"}是查询条件

操作符 格式 范例 RDBMS类似的语句
等于 {key:value} db.col.find({"ti":"mogo"}).pretty() where ti = 'mogo'
小于 {key:{$lt:value}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
小于或等于 {key:{$lte:value}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
大于 {key:{$gt: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:{$ne:value}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50

===
后面还会继续介绍关于查询的内容

上一篇下一篇

猜你喜欢

热点阅读