MONGODB

只愿长相守 提交于 2019-12-03 10:55:31

一,MONGODB

1.1,简介

MongoDB 是由 C++语言编写一个基于分布式文件存储的开源 NoSQL 数据库系统。在高负 载的情况下,可添加更多的节点,以保证服务性能。在许多场景下用于代替传统的关系型 数据库或键/值存储方式。旨在为 Web 应用提供可扩展的高性能数据存储解决方案。

MongoDB 提供了一个面向文档存储,操作起来比较简单和容易,可以存储比较复杂的 数据类型。最大的特点是支持的查询语言非常强大,语法优点类似于面向对象的查询语 言。几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索 引。是一个面向集合的,模式自由的文档型数据库。

 

1.2,MongoDB 适用领域:

l 网站数据

l 分布式场景

l 缓存层

l 文档格式存储

1.3,逻辑结构

 

(1)文档(document):是 mongodb 的核心概念,是 mongodb 逻辑存储的最小单元

(2)集合(collection):多个文档组成集合

(3)数据库(database):多个集合组成数据库

1.4,物理存储结构

1.4.1,数据存储结构

 

l 命名空间文件(ns)

l 数据文件(0,1,2)

1.4.2,日志存储结构

 

l 系统日志文件 logpath

l journal 日志文件

l oplog 复制操作日志文件

l 慢查询日志

1.5,数据类型

BSON 是 Binary JSON,是二进制的格式,能将 mongdb 的所有文档表示为字节字符串。

JSON 是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集

 

1.5.1,BSON 的数据类型

l null,代表空或者不存在

l布尔,只有 true 和 false

l 数字,64 位浮点数

l 字符串,utf8 字符串

l 数组,值或者列表可表示为数组

l 对象,对象的数据

1.5.2,BSON 的特点

简单,简洁,容易理解、解析、记忆

1.5.3,命名规则

l 文档的键命名几乎所有 utf8 字符,只有少数例外:$开头;\0(空字符);_下划线开头。

l 集合的命名几乎所有 utf8 字符,只有少数例外:$开头;\0(空字符);system.开头;”” 空字符串。

l 数据库的命名几乎所有 utf8 字符,只有少数例外:””空字符串;\0;空格;. 点;\ ;

/。

 

二,安装搭建mongodb

1.安装mongodb

1.1,环境:

CentOS-6.8 192.168.25.32/24 MongoDB

1.2下载此次安装版本

 [root@MongodDB tmp]# wget   https://www.mongodb.com/dr/fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-        3.2.7.tgz/download

1.3,解压安装包,并移动到/usr/local/下

 [root@MongodDB tmp]# tar zxvf mongodb-linux-x86_64-rhel62-3.2.7.tgz ​ [root@MongodDB tmp]# mv mongodb-linux-x86_64-rhel62-3.2.7/ /usr/local/mongodb

1.4指定同一时间最多可开启的文件数

 [root@MongodDB ~]# ulimit -n ​ 1024 ​ [root@MongodDB ~]# ulimit -n 65535 ​ [root@MongodDB ~]# ulimit -n ​ 65535

1.5,用户最多可开启的程序数目

 [root@MongodDB ~]# ulimit -u ​ 31994 ​ [root@MongodDB ~]# ulimit -u 65535 ​ [root@MongodDB ~]# ulimit -u ​ 65535

1.6,创建数据目录和日志文件及目录,并创建相应配置文件

 [root@MongodDB ~]# mkdir -p /data/mongodb1 ​ [root@MongodDB ~]# mkdir -p /data/logs/mongodb ​ [root@MongodDB ~]# touch /data/logs/mongodb/mongodb1.log ​ [root@MongodDB ~]# cd /usr/local/mongodb/ ​ [root@MongodDB mongodb]# ls ​ bin  GNU-AGPL-3.0  MPL-2  README  THIRD-PARTY-NOTICES ​ [root@MongodDB mongodb]# mkdir conf ​ [root@MongodDB mongodb]# cat conf/mongodb1.conf ​ port=27017 ​ dbpath=/data/mongodb1 ​ logpath=/data/logs/mongodb/mongodb1.log ​ logappend=true ​ fork=true ​ maxConns=5000 ​ storageEngine=mmapv1

1.7,启动MongoDB数据库,-f 指定配置文件

 [root@MongodDB mongodb]# /usr/local/mongodb/bin/mongod -f   /usr/local/mongodb/conf/mongodb1.conf  ​ [root@MongodDB mongodb]# /usr/local/mongodb/bin/mongod -f   /usr/local/mongodb/conf/mongodb1.conf  ​ about to fork child process, waiting until server is ready for connections. ​ forked process: 2016 ​ child process started successfully, parent exiting ​ [root@MongodDB mongodb]# netstat -anpt | grep mongod ​ tcp        0      0 0.0.0.0:27017               0.0.0.0:*                       LISTEN      2016/mongod          ​ [root@MongodDB mongodb]# ps aux | grep mongdb ​ root      2044  0.0  0.0 103324   892 pts/0    S+   20:04   0:00 grep mongdb

1.8,设置开机自动启动

 [root@MongodDB mongodb]# cat /etc/rc.local  ​ #!/bin/sh ​ # ​ # This script will be executed *after* all the other init scripts. ​ # You can put your own initialization stuff in here if you don't ​ # want to do the full Sys V style init stuff. ​   ​ touch /var/lock/subsys/local ​ rm -f /data/mongodb1/mongod.lock ​ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf

1.9,连接数据库

 [root@MongodDB mongodb]# /usr/local/mongodb/bin/mongo ​ MongoDB shell version: 3.2.7 ​ connecting to: test ​ Welcome to the MongoDB shell. ​ For interactive help, type "help". ​ For more comprehensive documentation, see ​ •   http://docs.mongodb.org/ ​ Questions? Try the support group ​ •   http://groups.google.com/group/mongodb-user ​ Server has startup warnings:  ​ 2019-09-02T19:50:12.394+0800 I CONTROL  [initandlisten] ** WARNING: You are running     this process as the root user, which is not recommended. ​ 2019-09-02T19:50:12.394+0800 I CONTROL  [initandlisten]  ​ 2019-09-02T19:50:12.395+0800 I CONTROL  [initandlisten]  ​ 2019-09-02T19:50:12.395+0800 I CONTROL  [initandlisten] ** WARNING:     /sys/kernel/mm/transparent_hugepage/enabled is 'always'. ​ 2019-09-02T19:50:12.395+0800 I CONTROL  [initandlisten] **        We suggest setting    it to 'never' ​ 2019-09-02T19:50:12.395+0800 I CONTROL  [initandlisten]  ​ 2019-09-02T19:50:12.395+0800 I CONTROL  [initandlisten] ** WARNING:     /sys/kernel/mm/transparent_hugepage/defrag is 'always'. ​ 2019-09-02T19:50:12.395+0800 I CONTROL  [initandlisten] **        We suggest setting    it to 'never' ​ 2019-09-02T19:50:12.395+0800 I CONTROL  [initandlisten]  ​ \> show dbs ​ local  0.078GB ​ \> exit ​ Bye

1.10,去除启动时的报错

 [root@MongodDB mongodb]# echo never >   /sys/kernel/mm/transparent_hugepage/enabled ​ [root@MongodDB mongodb]# echo never > /sys/kernel/mm/transparent_hugepage/defrag ​ [root@MongodDB mongodb]# vim .bash_profile ​ [root@MongodDB mongodb]# cat .bash_profile  ​ alias mongo=/usr/local/mongodb/bin/mongo ​ [root@MongodDB mongodb]# source .bash_profile 

1.11,关闭服务的三种方法

方法一:

 [root@MongodDB ~]# mongo  ​ > use admin ​ switched to db admin ​ > db.shutdownServer(); ​ server should be down... ​ 2019-09-02T20:19:49.361+0800 I NETWORK  [thread1] trying reconnect to   127.0.0.1:27017 (127.0.0.1) failed ​ 2019-09-02T20:19:49.361+0800 W NETWORK  [thread1] Failed to connect to  127.0.0.1:27017, reason: errno:111 Connection refused ​ 2019-09-02T20:19:49.361+0800 I NETWORK  [thread1] reconnect 127.0.0.1:27017     (127.0.0.1) failed failed  ​ > exit ​ bye ​ [root@MongodDB ~]# netstat -anpt |grep mongod

方法二:

 [root@MongodDB ~]# /usr/local/mongodb/bin/mongod -f     /usr/local/mongodb/conf/mongodb1.conf  ​ about to fork child process, waiting until server is ready for connections. ​ forked process: 2081 ​ child process started successfully, parent exiting ​ [root@MongodDB ~]# netstat -anpt | grep mongod ​ tcp        0      0 0.0.0.0:27017               0.0.0.0:*                       LISTEN      2081/mongod          ​ [root@MongodDB ~]# /usr/local/mongodb/bin/mongod -f     /usr/local/mongodb/conf/mongodb1.conf --shutdown ​ killing process with pid: 2081 ​ [root@MongodDB ~]# netstat -anpt | grep mongod

方法三:

 [root@MongodDB ~]# /usr/local/mongodb/bin/mongod -f     /usr/local/mongodb/conf/mongodb1.conf  ​ about to fork child process, waiting until server is ready for connections. ​ forked process: 2102 ​ child process started successfully, parent exiting ​ [root@MongodDB ~]# ps -ef |grep mongod ​ root      2102     1  0 20:22 ?        00:00:00     /usr/local/mongodb/bin/mongod -f    /usr/local/mongodb/conf/mongodb1.conf ​ root      2118  1857  0 20:22 pts/0    00:00:00 grep mongod ​ [root@MongodDB ~]# kill 2102 ​ [root@MongodDB ~]# netstat -anpt | grep mongod ​ [root@MongodDB ~]# 

1.12,开启两个实例:

 [root@MongodDB ~]# cd /usr/local/mongodb/conf/ ​ [root@MongodDB conf]# ls ​ mongodb1.conf ​ [root@MongodDB conf]# cp mongodb{1,2}.conf  ​ [root@MongodDB conf]# ls ​ mongodb1.conf  mongodb2.conf ​ [root@MongodDB conf]# cat mongodb2.conf  ​ port=27018 ​ dbpath=/data/mongodb2 ​ logpath=/data/logs/mongodb/mongodb2.log ​ logappend=true ​ fork=true ​ maxConns=5000 ​ storageEngine=mmapv1 ​ [root@MongodDB conf]# mkdir /data/mongodb2 ​ [root@MongodDB conf]# touch /data/logs/mongodb/mongodb2.log ​ [root@MongodDB conf]# chmod 777 /data/logs/mongodb/mongodb2.log 

1.13,编写启停脚本

 [root@MongodDB conf]# cd /etc/init.d/ ​ [root@MongodDB init.d]# cat mongodb  ​ #!/bin/bash ​ INSTANCE=$1 ​ ACTION=$2 ​ case "$ACTION" in ​ 'start') ​ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;; ​ 'stop') ​ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf   --shutdown;; ​ 'restart') ​ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf   --shutdown ​ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/"$INSTANCE".conf;; ​ esac ​ [root@MongodDB init.d]# chmod +x mongodb  ​ [root@MongodDB init.d]# /etc/init.d/mongodb mongodb1 start ​ about to fork child process, waiting until server is ready for connections. ​ forked process: 2139 ​ child process started successfully, parent exiting ​ [root@MongodDB init.d]# /etc/init.d/mongodb mongodb2 start ​ about to fork child process, waiting until server is ready for connections. ​ forked process: 2155 ​ child process started successfully, parent exiting ​ [root@MongodDB init.d]# netstat -anpt |grep mongod ​ tcp        0      0 0.0.0.0:27017               0.0.0.0:*                       LISTEN          2139/mongod          ​ tcp        0      0 0.0.0.0:27018               0.0.0.0:*                       LISTEN          2155/mongod   

 

到此mongodb已经搭建完毕了

 

2,基本操作

操作作用
show dbs 查看当前示例下的数据库列表,等同于 show database
show users 显示用户
use <db_name> 切换当前数据库
db.help() 显示数据库操作命令
show collections 显示当前数据库中的集合,等同于 show tables
db.mycoll.help() 显示集合操作命令,mycoll 是当前下叫做 mycoll 的集合
db.foo.find() 对当前数据库中 foo 集合进行数据查找
 [root@MongodDB ~]# mongo  ​ > show dbs ​ local  0.078GB > show databases ​ local  0.078GB ​ > use benet ​ switched to db benet ​ > show dbs ​ local  0.078GB ​ > show tables ​ > use local ​ switched to db local ​ > show tables ​ startup_log ​ system.indexes ​ > use benet ​ switched to db benet ​ > db.user.insert({"id":1,"name":"Tom"}); ​ WriteResult({ "nInserted" : 1 }) ​ > show dbs ​ benet  0.078GB ​ local  0.078GB ​ > show collections ​ system.indexes ​ user ​ > db.user.find() ​ { "_id" : ObjectId("5d6d0d5bea5345188da4699e"), "id" : 1, "name" : "Tom" } ​ >  ​ bye

查看帮助

 [root@MongodDB ~]# /usr/local/mongodb/bin/mongod --help ​ [root@MongodDB ~]# mongo  ​ MongoDB shell version: 3.2.7 ​ connecting to: test ​ Server has startup warnings:  ​ 2019-09-02T20:31:36.534+0800 I CONTROL  [initandlisten] ** WARNING: You are running this    process as the root user, which is not recommended. ​ 2019-09-02T20:31:36.534+0800 I CONTROL  [initandlisten]  ​ > help ​ •   db.help()                    help on db methods ​ •   db.mycoll.help()             help on collection methods ​ •   sh.help()                    sharding helpers ​ •   rs.help()                    replica set helpers ​ •   help admin                   administrative help ​ •   help connect                 connecting to a db help ​ •   help keys                    key shortcuts ​ •   help misc                    misc things to know ​ •   help mr                      mapreduce ​   ​ •   show dbs                     show database names ​ •   show collections             show collections in current database ​ •   show users                   show users in current database ​ •   show profile                 show most recent system.profile entries with time >= 1ms ​ •   show logs                    show the accessible logger names ​ •   show log [name]              prints out the last segment of log in memory, 'global' is  default ​ •   use <db_name>                set current database ​ •   db.foo.find()                list objects in collection foo ​ •   db.foo.find( { a : 1 } )     list objects in foo where a == 1 ​ •   it                           result of the last line evaluated; use to further iterate ​ •   DBQuery.shellBatchSize = x   set default number of items to display on shell ​ •   exit                         quit the mongo shell ​ > ​   ​ > db.help() ​ DB methods: ​ •   db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ] ​ •   db.auth(username, password) ​ •   db.cloneDatabase(fromhost) ​ •   db.commandHelp(name) returns the help for the command ​ •   db.copyDatabase(fromdb, todb, fromhost) ​ •   db.createCollection(name, { size : ..., capped : ..., max : ... } ) ​ •   db.createUser(userDocument) ​ •   db.currentOp() displays currently executing operations in the db ​ •   db.dropDatabase() ​ •   db.eval() - deprecated ​ •   db.fsyncLock() flush data to disk and lock server for backups ​ •   db.fsyncUnlock() unlocks server following a db.fsyncLock() ​ •   db.getCollection(cname) same as db['cname'] or db.cname ​ •   db.getCollectionInfos([filter]) - returns a list that contains the names and options of the db's collections ​ •   db.getCollectionNames() ​ •   db.getLastError() - just returns the err msg string ​ •   db.getLastErrorObj() - return full status object ​ •   db.getLogComponents() ​ •   db.getMongo() get the server connection object ​ •   db.getMongo().setSlaveOk() allow queries on a replication slave server ​ •   db.getName() ​ •   db.getPrevError() ​ •   db.getProfilingLevel() - deprecated ​ •   db.getProfilingStatus() - returns if profiling is on and slow threshold ​ •   db.getReplicationInfo() ​ •   db.getSiblingDB(name) get the db at the same server as this one ​ •   db.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if set ​ •   db.hostInfo() get details about the server's host ​ •   db.isMaster() check replica primary status ​ •   db.killOp(opid) kills the current operation in the db ​ •   db.listCommands() lists all the db commands ​ •   db.loadServerScripts() loads all the scripts in db.system.js ​ •   db.logout() ​ •   db.printCollectionStats() ​ •   db.printReplicationInfo() ​ •   db.printShardingStatus() ​ •   db.printSlaveReplicationInfo() ​ •   db.dropUser(username) ​ •   db.repairDatabase() ​ •   db.resetError() ​ •   db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into { cmdObj : 1 }

 

2.1,Mongodb常用命令

 

列出所有数据库:show dbs

 

列出所有的集合:show collections

 

使用某个数据库:use kw

 

查看当前所在数据库:db

 

插入数据库:db.student.insert({“name”:”kinverwu”})

 

导入数据库:mongoimport --db test --collection restaurants --drop --file primer -dataset.json

 

-db test 想往哪个数据库里面导入

 

--collection restaurants 想往哪个集合中导入

 

--drop 把集合清空

 

--file primer-dataset.json 哪个文件

 

删除数据库:

 

删除所有数据:db.dropDatabase();

 

删除指定得数据:db.restaurants.remove({“borough”:”Manhattan”})

 

删除justOne : db.restaurants.remove({“borough”:”Queens”},{justOne:true})

 

修改数据库:db.student.update({“name”:”小明”},{$set:{“age”:16}});

 

更改所有匹配项目:db.student.update({“sex”:”男”},{$set:{“age”:33}},{multi:true});

 

完整替换:db.student.update({“name”:”小明”},{“name”:”大明”,”age”:16});

 

查找数据库:

 

查找所有:db.restaurants.find()

 

精确匹配:db.student.find({“score.shuxue”:70});

 

多个条件:db.student.find({“score.shuxue”:70,”age”:12})

 

大于条件:db.student.find({“score.yuwen”:{$gt:50}});

 

或者:db.student.find({$or:[{“age”:9},{“age”:11}]});

 

升降排序:db.restaurants.find().sort({“borough”:1,”address.zipcode”:1})

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!