zoukankan      html  css  js  c++  java
  • MongoDB 基本命令

    ./mongo  进入命令行.

    1、show dbs

    显示当前数据库服务器上的数据库

    2、use pagedb

     切换到指定数据库pagedb的上下文,可以在此上下文中管理pagedb数据库以及其中的集合等

    3、show collections

    显示数据库中所有的集合(collection)

    4、db.serverStatus()  

    查看数据库服务器的状态。

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

    use fragment

    db.stats()

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

    db.getCollectionNames()

    7、创建数据库

    如果你习惯了关系型数据库,你可能会寻找相关的创建数据库的命令。在MongoDB中,你可以直接通过use dbname来切换到这个数据库上下文下面,系统会自动延迟创建该数据库

    8、删除数据库

    直接使用db.dropDatabase()即可删除数据库。

    9、创建集合

    可以使用命令db.createCollection(name, { size : ..., capped : ..., max : ... } )创建集合

    10、删除集合

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

    11、插入更新记录

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

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

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

    12、查询一条记录

    使用findOne()函数,参数为查询条件,可选,系统会随机查询获取到满足条件的一条记录(如果存在查询结果数量大于等于1)示例如下所示:

    db.storeCollection.findOne({'version':'3.5'})  

    {  

            "_id" : ObjectId("4ef970f23c1fc4613425accc"),  

            "version" : "3.5",  

            "segment" : "e3ol6"  

    }  

    13、查询多条记录

    使用find()函数,参数指定查询条件,不指定条件则查询全部记录。

    14、删除记录

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

    db.storeCollection.remove({'version':'3.5'})  

    db.storeCollection.findOne()  

    null  

    15、创建索引

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

    > use pagedb  

    switched to db pagedb  

    > db.page.ensureIndex({'title':1, 'url':-1})  

    > db.system.indexes.find()  

    { "name" : "_id_", "ns" : "pagedb.page", "key" : { "_id" : 1 }, "v" : 0 }  

    { "name" : "_id_", "ns" : "pagedb.system.users", "key" : { "_id" : 1 }, "v" : 0}  

    { "_id" : ObjectId("4ef977633c1fc4613425accd"), "ns" : "pagedb.page", "key" : {"title" : 1, "url" : -1 }, "name" : "title_1_url_-1", "v" : 0 }  

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

    使用db.system.indexes.find()可以查询全部索引。

    16、查询索引

    我们为集合建立的索引,那么可以通过集合的getIndexes()方法实现查询

    当然,如果需要查询系统中全部的索引,可以使用db.system.indexes.find()函数。

    17、删除索引

    删除索引给出了两个方法:

    db.mycoll.dropIndex(name)  

    db.mycoll.dropIndexes()  

    第一个通过指定索引名称,第二个删除指定集合的全部索引。

    18、索引重建

    可以通过集合的reIndex()方法进行索引的重建,示例如下所示:

    > db.page.reIndex()  

    {  

            "nIndexesWas" : 2,  

            "msg" : "indexes dropped for collection",  

            "ok" : 1,  

            "nIndexes" : 2,  

            "indexes" : [  

                    {  

                            "name" : "_id_",  

                            "ns" : "pagedb.page",  

                            "key" : {  

                                    "_id" : 1  

                            },  

                            "v" : 0  

                    },  

                    {  

                            "_id" : ObjectId("4ef977633c1fc4613425accd"),  

                            "ns" : "pagedb.page",  

                            "key" : {  

                                    "title" : 1,  

                                    "url" : -1  

                            },  

                            "name" : "title_1_url_-1",  

                            "v" : 0  

                    }  

            ],  

            "ok" : 1  

    }  

    19、统计集合记录数

    use fragment

    db.baseSe.count()

    统计结果,如下所示:

    > use fragment  

    switched to db fragment  

    > db.baseSe.count()  

    36749  

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

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

    use fragment

    db.baseSe.find().count()

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

    > use fragment  

    switched to db fragment  

    > db.baseSe.find().count()  

    36749  

    上述执行先根据查询条件查询结果,然后统计了查询数据库fragment的baseSe结果记录集合中记录数。

    21、查询指定数据库的集合当前可用的存储空间

    use fragment

    > db.baseSe.storageSize()

    142564096

    22、查询指定数据库的集合分配的存储空间

    > db.baseSe.totalSize()

    144096000

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

    (三)启动与终止

    1、正常启动

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

    说明:

    指定数据存储目录和日志目录,如果采用安全认证模式,需要加上--auth选项,如:

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

    2、以修复模式启动

    mongod --repair

    以修复模式启动数据库。

    实际很可能数据库数据损坏或数据状态不一致,导致无法正常启动MongoDB服务器,根据启动信息可以看到需要进行修复。或者执行:

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

    3、终止服务器进程

    db.shutdownServer()

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

    (四)安全管理

    1、以安全认证模式启动

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

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

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

    2、添加用户

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

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

    {  

            "user" : "admin",  

            "readOnly" : false,  

            "pwd" : "995d2143e0bf79cba24b58b3e41852cd"  

    }  

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

    1、备份全部数据库

    mkdir testbak

    cd testbak

    mongodump

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

    2、备份指定数据库

    mongodump -d pagedb

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

    3、备份一个数据库中的某个集合

    mongodump -d pagedb -c page

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

    4、恢复全部数据库

    cd testbak

    mongorestore --drop  /opt/dump

    说明:将备份的所有数据库恢复到数据库,--drop指定恢复数据之前删除原来数据库数据,否则会造成回复后的数据中数据重复。

    5、恢复某个数据库的数据

    cd testbak

    mongorestore -d pagedb --drop /opt/dump/pagedb

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

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

    cd testbak

    mongorestore -d pagedb -c page --drop

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

    7、向MongoDB导入数据

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

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

    --type支持的类型有三个:csv、tsv、json

    8、从向MongoDB导出数据

    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指定一个查询条件,需要使用单引号括起来,如下所示:

    mongoexport -d page -c Article -q '{"spiderName": "mafengwoSpider"}' -f _id,title,content,images,publishDate,spiderName,url --jsonArray > mafengwoArticle.txt  

    复制数据库

    db.copyDatabase("111","222") 

    ->use Admin         (切换到创建用户)
    
    ->db.TestDb          (创建数据库) 
    
    ->db.addUser(“userName”,”Pwd”)    创建用户
    
    ->db.auth(“userName”,”Pwd”)   设置用户为允许连接的用户
    
    ->db.createCollection(“TableName”)   创建表
    
    ->showcollections          查看表是否创建成功
    
    ->db.TableName.Save({age:1})    添加数据
    
    ->db.TableName.find()                        查看添加的数据是否成功(如果没有查询到任何的结果,说明添加失败)
    
     ->添加数据,如果返回的(shell):1 说明有错误 

    MongoDB权限管理之用户名和密码的操作

    添加用户的时候必须满足以下两个条件:

    1.有相关权限的情况下

    2. mongod没有加--auth的情况下(如果加了,你添加权限的话 会出现下面的情况)。

    ----------------------------------------------------------------

    > use admin    

    switched to db admin    

    > db.addUser('sa','sa')    

    Fri Jul 22 14:31:13 uncaught exception: error {    

    "$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",    

    "code" : 10057    

    }    

    >    

    ---------------------------------------------------------------------

    报错了......

    所以我们添加用户时必须先在没有加--auth的时候添加个super  admin。

    服务起来后,进入./mongo

    -----------------------------------------------------------------

    > use admin    

    switched to db admin    

      

    > db.addUser('sa','sa')    

    {    

    "_id" : ObjectId("4e2914a585178da4e03a16c3"),    

    "user" : "sa",    

    "readOnly" : false,    

    "pwd" : "75692b1d11c072c6c79332e248c4f699"    

    }    

    >    

    ---------------------------------------------------------------------

    这样就说明 已经成功建立了,然后我们试一下权限。

    ----------------------------------------------------------------------

    > show collections    

    system.indexes    

    system.users   

    ----------------------------------------------------------------------

    在没有加--auth的情况下 可以正常访问admin  local默认的两个表。

    -----------------------------------------------------------------------

    > db.system.users.find()    

    { "_id" : ObjectId("4e2914a585178da4e03a16c3"), "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699" }>    

    ----------------------------------------------------------------------- 

     已经成功建立。

    下面把服务加上--auth的选项,再进入./mongo

    -----------------------------------------------------------------------

    > use admin    

    switched to db admin    

    > show collections    

    Fri Jul 22 14:38:49 uncaught exception: error: {    

    "$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",    

    "code" : 10057    

    }    

    -----------------------------------------------------------------------

    可以看出已经没有访问权限了。

    我们就用自己的密钥登录下:

    -----------------------------------------------------------------------

    > db.auth('sa','sa')    

    1   

    ----------------------------------------------------------------------

    返回1说明验证成功!

    再show collections下就成功了。 

    -----------------------------------------------------------------------

    登录其它表:

    -----------------------------------------------------------------------

    > use test    

    switched to db test    

    > show collections    

    Fri Jul 22 14:40:47 uncaught exception: error: {    

    "$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",    

    "code" : 10057    

    }   

    --------------------------------------------------------------------

    也需要验证,验证一下试试..

    --------------------------------------------------------------------

    > use test    

    switched to db test    

    > show collections    

    Fri Jul 22 14:40:47 uncaught exception: error: {    

    "$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",    

    "code" : 10057    

    }    

    > db.auth('sa','sa')    

    0   

    ----------------------------------------------------------------------

     返回0验证失败。 为什么呢? ...

    原因是因为 admin 基于全局的...所以必须从admin那么登录 然后 再use其它表才可以。

    ----------------------------------------------------------------------

    > use admin  

    switched to db admin    

    > db.auth('sa','sa')    

    1    

    > use test    

    switched to db test    

    > show collections    

    >    

    ----------------------------------------------------------------------

    如果想单独访问一个表,用独立的用户名,就需要在那个表里面建相应的user。

    ----------------------------------------------------------------------

    > use admin    

    switched to db admin    

    > db.auth('sa','sa')    

    1    

    > use test    

    switched to db test    

    > db.addUser('test','test')    

    {    

    "user" : "test",    

    "readOnly" : false,    

    "pwd" : "a6de521abefc2fed4f5876855a3484f5"    

    }    

    >    

    ----------------------------------------------------------------------

    当然必须有相关权限才可以建立。

    再登录看看:

    ----------------------------------------------------------------------

    > use test

    switched to db test 

    > show collections    

    Fri Jul 22 14:45:08 uncaught exception: error: {    

    "$err" : "unauthorized db:test lock type:-1 client:127.0.0.1",    

    "code" : 10057    

    }    

    > db.auth('test','test')  

    1    

    > show collections    

    system.indexes    

    system.users    

    >    

    ----------------------------------------------------------------------

  • 相关阅读:
    halcon 常用算子中文解释说明(随时更新)
    傅里叶变换 fft_generic halcon
    phpStorm使用技巧及快捷键
    js控制文本框只能输入数字 及 常用字符对应ASCII码值
    Delphi 7 里没有加载的控件
    用VBA计算WPS 表格ET EXCEL中的行数和列数的多重方法
    PHP 把GBK编码转换为UTF8
    Oracle性能优化5-索引的不足
    Oracle性能优化4-索引
    Oracle性能优化3-sql优化一定要等价
  • 原文地址:https://www.cnblogs.com/jicki/p/5546881.html
Copyright © 2011-2022 走看看