NoSQL详解MongoDB管理命令

MongoDB是一个NoSQL数据库系统:一个数据库可蕴涵多单集(Collection),每个集合对应于关系数据库中之阐明;而每个集合中好储存一组由列标识的记录,列是可以擅自定义之,非常灵活,由同样组列标识的实体的集对应于关系数据库表中之执行。下面通过熟悉MongoDB的中心管理命令,来打探MongoDB提供的DBMS的基本功能和作为。 

MongoDB命令帮助系统 

以装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的军事管制与监督。看一下MongoDB的授命帮助系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
root@dev:~# mongo
MongoDB shell version: ..
connecting to: test
> help
    db.help()          help on db methods
    db.mycoll.help()       help on collection methods
    rs.help()          help on replica set methods
    help connect         connecting to a db help
    help admin          administrative help
    help misc          misc things to know
    help mr           mapreduce help
    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 >= ms
    use <db_name>        set current database
    db.foo.find()        list objects in collection foo
    db.foo.find( { a : } )   list objects in foo where a ==
    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

即时是MongoDB最顶层的命令列表,主要告诉我们管理数据库相关的部分架空的框框:数据库操作帮助、集合操作帮助、管理辅助。如果您想了解数据库操作更详细的帮命令,可以一直利用db.help(),如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
db.help()
DB methods:
    db.addUser(username, password[, readOnly=false])
    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.currentOp() displays the current operation in the db
    db.dropDatabase()
    db.eval(func, args) run code server-side
    db.getCollection(cname) same as db['cname'] or db.cname
    db.getCollectionNames()
    db.getLastError() - just returns the err msg string
    db.getLastErrorObj() - return full status object
    db.getMongo() get the server connection object
    db.getMongo().setSlaveOk() allow this connection to read from the nonmaster member of a replica pair
    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.isMaster() check replica primary status
    db.killOp(opid) kills the current operation in the db
    db.listCommands() lists all the db commands
    db.printCollectionStats()
    db.printReplicationInfo()
    db.printSlaveReplicationInfo()
    db.printShardingStatus()
    db.removeUser(username)
    db.repairDatabase()
    db.resetError()
    db.runCommand(cmdObj) run a database command. if cmdObj is a string, turns it into { cmdObj : }
    db.serverStatus()
    db.setProfilingLevel(level,<slowms>) =off =slow =all
    db.shutdownServer()
    db.stats()
    db.version() current version of the server
    db.getMongo().setSlaveOk() allow queries on a replication slave server

对数据库进行管制与操作的骨干命令,可以于上面得到到。如果想如果取重新多,而且每个命令的详实用法,可以采用方面列有的db.listCommands()查询。

其余一个比较基础的凡针对点名数据库的聚合进行操作、管理与督查,可以经过查询db.mycoll.help()获取到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
db.mycoll.help()
 DBCollection help
     db.mycoll.find().help() - show DBCursor help
     db.mycoll.count()
     db.mycoll.dataSize()
     db.mycoll.distinct( key ) - eg. db.mycoll.distinct( 'x' )
     db.mycoll.drop() drop the collection
     db.mycoll.dropIndex(name)
     db.mycoll.dropIndexes()
     db.mycoll.ensureIndex(keypattern[,options]) - options is an object with these possible fields: name, unique, dropDups
     db.mycoll.reIndex()
     db.mycoll.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
                            e.g. db.mycoll.find( {x:} , {name:, x:} )
     db.mycoll.find(...).count()
     db.mycoll.find(...).limit(n)
     db.mycoll.find(...).skip(n)
     db.mycoll.find(...).sort(...)
     db.mycoll.findOne([query])
     db.mycoll.findAndModify( { update : ... , remove : bool [, query: {}, sort: {}, 'new': false] } )
     db.mycoll.getDB() get DB object associated with collection
     db.mycoll.getIndexes()
     db.mycoll.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } )
     db.mycoll.mapReduce( mapFunction , reduceFunction , <optional params> )
     db.mycoll.remove(query)
     db.mycoll.renameCollection( newName , <dropTarget> ) renames the collection.
     db.mycoll.runCommand( name , <options> ) runs a db command with the given name where the first param is the collection name
     db.mycoll.save(obj)
     db.mycoll.stats()
     db.mycoll.storageSize() - includes free space allocated to this collection
     db.mycoll.totalIndexSize() - size in bytes of all the indexes
     db.mycoll.totalSize() - storage allocated for all data and indexes
     db.mycoll.update(query, object[, upsert_bool, multi_bool])
     db.mycoll.validate() - SLOW
     db.mycoll.getShardVersion() - only for use with sharding

有关数据库暨集纳管理之系命令,是最基础和最常用之,如集合查询、索引操作相当。

主干命令和实例 

下通过实际的例子来演示一些大规模的命:

(一)基本命令 

1、show dbs

来得当前数据库服务器上的数据库

2、use pagedb

 切换至指定数据库pagedb的上下文,可以当这个前后文中管理pagedb数据库及中的聚集等

3、show collections

显示数据库中存有的集结(collection)

4、db.serverStatus()  

查数据库服务器的状态。示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
{
     "host" : "dev",
     "version" : "..",
     "process" : "mongod",
     "uptime" : ,
     "uptimeEstimate" : ,
     "localTime" : ISODate("--T::.Z"),
     "globalLock" : {
         "totalTime" : ,
         "lockTime" : ,
         "ratio" : .,
         "currentQueue" : {
             "total" : ,
             "readers" : ,
             "writers" :
         },
         "activeClients" : {
             "total" : ,
             "readers" : ,
             "writers" :
         }
     },
     "mem" : {
         "bits" : ,
         "resident" : ,
         "virtual" : ,
         "supported" : true,
         "mapped" :
     },
     "connections" : {
         "current" : ,
         "available" :
     },
     "extra_info" : {
         "note" : "fields vary by platform",
         "heap_usage_bytes" : ,
         "page_faults" :
     },
     "indexCounters" : {
         "btree" : {
             "accesses" : ,
             "hits" : ,
             "misses" : ,
             "resets" : ,
             "missRatio" : .
         }
     },
     "backgroundFlushing" : {
         "flushes" : ,
         "total_ms" : ,
         "average_ms" : .,
         "last_ms" : ,
         "last_finished" : ISODate("--T::.Z")
     },
     "cursors" : {
         "totalOpen" : ,
         "clientCursors_size" : ,
         "timedOut" :
     },
     "network" : {
         "bytesIn" : ,
         "bytesOut" : ,
         "numRequests" :
     },
     "opcounters" : {
         "insert" : ,
         "query" : ,
         "update" : ,
         "delete" : ,
         "getmore" : ,
         "command" :
     },
     "asserts" : {
         "regular" : ,
         "warning" : ,
         "msg" : ,
         "user" : ,
         "rollovers" :
     },
     "writeBacksQueued" : false,
     "ok" :
 }

有时,通过查数据库服务器的状态,可以判断数据库是否是问题,如果起问题,如数据损坏,可以马上履行修复。

5、查询指定数据库统计信息

1
2
use fragment
db.stats()

查询结果示例如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
db.stats()
 {
         "db" : "fragment",
         "collections" : ,
         "objects" : ,
         "avgObjSize" : .,
         "dataSize" : ,
         "storageSize" : ,
         "numExtents" : ,
         "indexes" : ,
         "indexSize" : ,
         "fileSize" : ,
         "ok" :
 }

亮fragment数据库的统计信息。

6、查询指定数据库含的集结名称列表

1
db.getCollectionNames()

结果如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
db.getCollectionNames()
 [
     "u",
     "baseSe",
     "bytravel",
     "daodao",
     "goeu",
     "lotour",
     "lvping",
     "mafengwo",
     "sina",
     "sohu",
     "system.indexes"
 ]

(二)基本DDL和DML

 1、创建数据库

若是你习惯了事关项目数据库,你或许会见找系的创始数据库的下令。在MongoDB中,你可以一直通过use
dbname来切换到之数据库上下文下面,系统会自行顺延创建该数据库,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
show dbs
admin  .GB
local  (empty)
pagedb .GB
test  .GB
use LuceneIndexDB
switched to db LuceneIndexDB
show dbs
admin  .GB
local  (empty)
pagedb .GB
test  .GB
db
LuceneIndexDB
db.storeCollection.save({'version':'.', 'segment':'eol'})
show dbs
LuceneIndexDB  .GB
admin  .GB
local  (empty)
pagedb .GB
test  .GB

看得出,在use指定数据库后,并且于指定其中的一个汇合并插入数据后,数据库与聚合都于创造了。

2、删除数据库

直白以db.dropDatabase()即可删除数据库。

3、创建集合

得下命令db.createCollection(name, { size : …, capped : …, max :
… } )创建集合,示例如下所示:

4、删除集合

删除集合,可以执行db.mycoll.drop()。

5、插入更新记录

直接以集合的save方法,如下所示:

1
<em>db.storeCollection.save({'version':'3.5', 'segment':'e3ol6'})</em>

更新记录,使用save会将原来的记录值进行覆盖实现记录更新。

6、查询同一修记下

采用findOne()函数,参数为查询条件,可选取,系统会随便询问得到到满足条件的一致长条记下(如果是询问结果数量过等于1)示例如下所示: 

7、查询多漫漫记录 

使find()函数,参数指定询问条件,不点名条件虽查询所有记录。

8、删除记录

使用集合的remove()方法,参数指定为查询条件,示例如下所示:

1
2
3
db.storeCollection.remove({'version':'.'})
db.storeCollection.findOne()
null

9、创建索引

足利用集合的ensureIndex(keypattern[,options])方法,示例如下所示: 

1
2
3
4
5
6
7
use pagedb
switched to db pagedb
db.page.ensureIndex({'title':, 'url':-})
db.system.indexes.find()
 { "name" : "_id_", "ns" : "pagedb.page", "key" : { "_id" : }, "v" : }
 { "name" : "_id_", "ns" : "pagedb.system.users", "key" : { "_id" : }, "v" : }
 { "_id" : ObjectId("efcfcaccd"), "ns" : "pagedb.page", "key" : {"title" : , "url" : - }, "name" : "title__url_-", "v" : }

 上述,ensureIndex方法参数中,数字1代表升序,-1代表降序。

以db.system.indexes.find()可以查询任何目。

10、查询索引

咱吧集建立的目录,那么好透过集聚的getIndexes()方法实现查询,示例如下所示: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
db.page.getIndexes()
[
    {
        "name" : "_id_",
        "ns" : "pagedb.page",
        "key" : {
            "_id" :
        },
        "v" :
    },
    {
        "_id" : ObjectId("efcfcaccd"),
        "ns" : "pagedb.page",
        "key" : {
            "title" : ,
            "url" : -
        },
        "name" : "title__url_-",
        "v" :
    }
]

自然,如果要查询系统中全部的目录,可以采用db.system.indexes.find()函数。

 11、删除索引

 删除索引为出了片只方法: 

1
2
db.mycoll.dropIndex(name)
  db.mycoll.dropIndexes()

先是个经过点名索引名称,第二单勾指定集合的一切目录。

 12、索引重建

足由此聚合的reIndex()方法开展索引的重建,示例如下所示:

1
2
use fragment
db.baseSe.count()

 

统计结果,如下所示: 

1
2
3
use fragment
switched to db fragment
db.baseSe.count()

上述统计了数据库fragment的baseSe集合中记录数。

 14、查询并统计结果记录数

1
2
use fragment
db.baseSe.find().count()

find()可以提供查询参数,然后查询并统计结果,如下所示: 

15、查询指定数据库的集当前可用之贮存空间

1
2
3
use fragment
db.baseSe.storageSize()
142564096

16、查询指定数据库的联谊分配的囤空间

1
2
db.baseSe.totalSize()
 144096000

上述查询结果遭遇,包括也集(数据及其索引存储)分配的存储空间。

(三)启动和住 

1、正常启动

1
mongod --dbpath /usr/mongo/data --logfile /var/mongo.log

说明:

点名数量存储目录和日志目录,如果下安全认证模式,需要添加–auth选项,如:

1
mongod --auth --dbpath /usr/mongo/data --logfile /var/mongo.log

2、以修复模式启动

1
mongod --repair

坐修复模式启动数据库。

其实甚可能数据库数据损坏或数状态不雷同,导致无法正常启动MongoDB服务器,根据启动信息可以观看需要开展修补。或者执行:

1
mongod -f /etc/mongodb.conf --repair

3、终止服务器进程

1
db.shutdownServer()

停止数据库服务器进程。或者,可以一直kill掉mongod进程即可。

(四)安全管理 

1、以安认证模式启动 

1
mongod --auth --dbpath /usr/mongo/data --logfile /var/mongo.log

运用–auth选项启动mongod进程即可启用认证模式。

或者,也得以改/etc/mongodb.conf,设置auth=true,重开mongod进程。

2、添加用户

1
db.addUser("admin", ",%F23_kj~00Opoo0+\/")

加上数据库用户,添加成功,则显得结果如下所示:

1
db.auth("admin", ",%F23_kj~00Opoo0+\/")

数据库安全认证。认证成功展示结果:

1
2
3
4
5
{
    "user" : "admin",
    "readOnly" : false,
    "pwd" : "debfcbabbecd"
}

如是证明用户,执行某些命令,可以视对履行结果,如下所示:

4、为数据库写多少(同步到磁盘)加锁

1
db.runCommand({fsync:1,lock:1})

说明:

该操作都对数据库上锁,不同意实施写多少操作,一般以执行数据库备份时有用。执行命令,结果示例如下:

5、查看时锁状态

1
db.currentOp()

说明:

询问结果如下所示:

6、解锁

1
2
use admin
db.$cmd.sys.unlock.findOne()

说明:

实行解锁,结果如下所示:

1
db.currentOp()

状态信息如下:

(五)数据备份、恢复和迁移管理 

1、备份全部数据库

1
2
3
mkdir testbak
cd testbak
mongodump

征:默认备份目录及数据文件格式为./dump/[databasename]/[collectionname].bson

2、备份指定数据库

1
mongodump -d pagedb

说明:备份数据库pagedb中的多寡。

3、备份一个数据库中之有集合

1
mongodump -d pagedb -c page

证明:备份数据库pagedb的page集合。

4、恢复全部数据库

1
2
cd testbak
mongorestore --drop

证:将备份的有所数据库恢复到数据库,–drop指定恢复数据之前删除原来数据库数据,否则会招致回复后底数据遭到数据再度。

5、恢复某个数据库的数

1
2
cd testbak
mongorestore -d pagedb --drop

征:将备份的pagedb的数据恢复到数据库。

6、恢复某个数据库的某部集合的数额

1
2
cd testbak
mongorestore -d pagedb -c page --drop

证:将备份的pagedb的的page集合的数据恢复到数据库。

7、向MongoDBNoSQL导入数据

1
mongoimport -d pagedb -c page --type csv --headerline --drop < csvORtsvFile.csv

说明:将文件csvORtsvFile.csv的数目导入到pagedb数据库的page集合中,使用cvs或tsv文件的列名作为集的列名。需要留意的是,使用–headerline选码时,只支持csv和tsv文件。

–type支持的品类有三单:csv、tsv、json
外依次选项的施用,可以查帮助:

1
mongoexport -d pagedb -c page -q {} -f _id,title,url,spiderName,pubDate --csv > pages.csv

证:将pagedb数据库中page集合的数额导出到pages.csv文件,其中各选项意义:

-f 指定cvs列名为_id,title,url,spiderName,pubDate
-q 指定询问条件

其余各个选项的使,可以查阅帮助:

而点的选项-q指定一个询问条件,需要运用单引号括起来,如下所示:

再不,就会产出下面的一无是处:

1、基于mongo实现长途连接

当您早就连续至一个长途的MongoDB数据库服务器(例如,通过mongo连接到192.168.0.184),现在想只要在是会话中连连其他一个远程的数据库服务器(192.168.0.197),可以执行如下命令:

假如启用了安康证明模式,可以在获取数据库连接实例时,指定认证账号.

吓了,本文为大家介绍的MongoDB管理命令到此结束,希望本文分享会吃大家带来帮助。

网站地图xml地图