管理工具:MongoDB shell


  • 註冊用戶

    1. MongoDB shell简介

    • MongoDB shell 是MongoDB 自带的一个 JavaScript shell,它可以从命令行与 MongoDB 实例交互。通过使用这个shell 可以实现对数据库的管理操作、运行情况检查等。MongoDB sell 对于支撑MongoDB 的开发、管理、运维等工作至关重要不可或缺。

    2. shell运行

    • shell 启动的时候会自动连接 MongoDB 服务器。要运行shell,首先要确保mongod已经启动,然后再运行mongo命令。
    MongoDB shell version: 3.2.7-14-gad67469
    connecting to: test
    
    • shell 是功能完备的 JavaScript 解释器,可以运行任何 JavaScript 程序。我们可以运行一个简单的数学运算来证明这一点:
    > x=10
    10
    > y=20
    20
    > x*y;
    200
    >
    
    • shell 还支持非 JavaScript 语法,比如对数据库的一些操作命令:
    > show dbs
    bitest   0.000GB
    local    0.000GB
    test     0.000GB
    > use bitest
    switched to db bitest
    > show collections
    bitest_database
    >
    

    3. shell 基本操作

    • shell 中对数据的操作通常也是4个基本操作:插入、更新、删除、查询。

    3.1 插入

    • 插入文档数据到集合里面使用函数 insert 。例如,要存储一个通讯录(address) 我们可以先创建一个局部变量 tel ,内容包括 "name","addr","phone" 几个键。
    > tel = {"name":"jason",
    ...  "addr":"Taiwan",
    ...  "phone":888888}
    {  "name" : "jason", "addr", : "Taiwan", "phone" : 888888 }
    >
    
    • tel 对象已经创建完成,这个时候我们就可以使用 insert 将文档插入到集合中:
    > db.address.insert(tel)
    WriteResult({ "nInserted" : 1})
    >
    

    3.2 查询

    • 查询集合里的所有文档使用函数 find 。如果只是想查看一个文档,可以用 fineOne:
    >  db.address.findOne()
    {
                "_id" : ObjectId("580f147cf28fbb3e3516eea9"),
                "name" : "jason",
                "addr" : "Taiwan",
                "phone" : 888888
    }
    >
    
    >  db.address.find()
    { "_id" : ObjectId("580f147cf28fbb3e3516eea9"), "name" : "jason", "addr" : "Taiwan", "phone" : 888888}
    >
    

    3.3 更新

    • 如果要更改通讯录,可以使用 update 函数。需要至少两个参数:
    • 1.需要更新文档的限制条件
    • 2.新的文档
    • 假设我们需要把电话号码 888888 更新电话号码为 666666,则需要使用如下操作:
    >  db.address.update({"phone":888888},{"phone":666666})
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    >
    
    • 再用 find 查询一下,已经可以看到电话号码888888已经被修改为666666
    >  db.address.findOne()
    { "_id" :  ObjectId("580f147cf28fbb3e3516eea9"),  "phone" : 666666 }
    >
    

    3.4 删除

    • 删除集合中的文档使用函数 remove 。在不使用任何限制条件的情况下,它会删除集合内的所有文档。类似于关系数据库中 使用 delete 没有加 where 条件。
    >  db.address.remove({"phone":666666})
    WriteResult({ "nRemoved" : 1 })
    >
    
    • 现在集合中已经没有文档。
    >  db.address.findOne()
    null
    >
    

    4. shell的使用技巧

    • shell 内置了帮助文档,可以通过 help 命令查看。
    > 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.foo.helo() 来查看。
    • 函数使用方法可以在输入的时候不加 () 带出。显示内容为该函数的 JavaScript 源代码。比如我们想看一下 remove 的原理,就可以输入如下内容:
    > db.foo.remove
    function (t, justOne) {
        var parsed = this._parseRemove(t, justOne);
        var query = parsed.query;
        var justOne = parsed.justOne;
        var wc = parsed.wc;
        var result = undefined;
        var startTime =
            (typeof(_verboseShell) === 'undefined' || !_verboseShell) ? 0 : new Date().getTime();
    
        if (this.getMongo().writeMode() != "legacy") {
            var bulk = this.initializeOrderedBulkOp();
            var removeOp = bulk.find(query);
    
            if (justOne) {
                removeOp.removeOne();
            } else {
                removeOp.remove();
            }
    
            try {
                result = bulk.execute(wc).toSingleResult();
            } catch (ex) {
                if (ex instanceof BulkWriteError || ex instanceof WriteCommandError)
     {
                    result = ex.toSingleResult();
                } else {
                    // Other exceptions thrown
                    throw Error(ex);
                }
            }
        } else {
            this._validateRemoveDoc(t);
            this.getMongo().remove(this._fullName, query, justOne);
    
            // enforce write concern, if required
            if (wc)
                result = this.runCommand("getLastError", wc instanceof WriteConcern? wc.toJSON() : wc);
        }
    
        this._printExtraInfo("Removed", startTime);
        return result;
    }
    >
    

登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待