MongoDB是一个NoSQL数据库系统:一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表;而每个集合中可以存储一组由列标识的记录,列是可以自由定义的,非常灵活,由一组列标识的实体的集合对应于关系数据库表中的行。下面通过熟悉MongoDB的基本管理命令,来了解MongoDB提供的DBMS的基本功能和行为。
MongoDB命令帮助系统
在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控。看一下MongoDB的命令帮助系统:
- root@dev2:~# mongo
- MongoDB shell version: 1.8.3
- 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 >= 1ms
- 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
这是MongoDB最顶层的命令列表,主要告诉我们管理数据库相关的一些抽象的范畴:数据库操作帮助、集合操作帮助、管理帮助。如果你想了解数据库操作更详细的帮助命令,可以直接使用db.help(),如下所示:
- > 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 : 1 }
- db.serverStatus()
- db.setProfilingLevel(level,<slowms>) 0=off 1=slow 2=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()获取到:
- > 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:77} , {name:1, x:1} )
- 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
- {
- "host" : "dev2",
- "version" : "1.8.3",
- "process" : "mongod",
- "uptime" : 845446,
- "uptimeEstimate" : 839192,
- "localTime" : ISODate("2011-12-27T04:03:12.512Z"),
- "globalLock" : {
- "totalTime" : 845445636925,
- "lockTime" : 13630973982,
- "ratio" : 0.016122827283818857,
- "currentQueue" : {
- "total" : 0,
- "readers" : 0,
- "writers" : 0
- },
- "activeClients" : {
- "total" : 0,
- "readers" : 0,
- "writers" : 0
- }
- },
- "mem" : {
- "bits" : 64,
- "resident" : 12208,
- "virtual" : 466785,
- "supported" : true,
- "mapped" : 466139
- },
- "connections" : {
- "current" : 27,
- "available" : 792
- },
- "extra_info" : {
- "note" : "fields vary by platform",
- "heap_usage_bytes" : 70895216,
- "page_faults" : 17213898
- },
- "indexCounters" : {
- "btree" : {
- "accesses" : 4466653,
- "hits" : 4465526,
- "misses" : 1127,
- "resets" : 0,
- "missRatio" : 0.00025231420484197006
- }
- },
- "backgroundFlushing" : {
- "flushes" : 14090,
- "total_ms" : 15204393,
- "average_ms" : 1079.0910574875797,
- "last_ms" : 669,
- "last_finished" : ISODate("2011-12-27T04:02:28.713Z")
- },
- "cursors" : {
- "totalOpen" : 3,
- "clientCursors_size" : 3,
- "timedOut" : 53
- },
- "network" : {
- "bytesIn" : 63460818650,
- "bytesOut" : 763926196104,
- "numRequests" : 67055921
- },
- "opcounters" : {
- "insert" : 7947057,
- "query" : 35720451,
- "update" : 16263239,
- "delete" : 154,
- "getmore" : 91707,
- "command" : 68520
- },
- "asserts" : {
- "regular" : 0,
- "warning" : 1,
- "msg" : 0,
- "user" : 7063866,
- "rollovers" : 0
- },
- "writeBacksQueued" : false,
- "ok" : 1
- }
- > db.stats()
- {
- "db" : "fragment",
- "collections" : 12,
- "objects" : 384553,
- "avgObjSize" : 3028.40198360174,
- "dataSize" : 1164581068,
- "storageSize" : 1328351744,
- "numExtents" : 109,
- "indexes" : 10,
- "indexSize" : 16072704,
- "fileSize" : 4226809856,
- "ok" : 1
- }
- > db.getCollectionNames()
- [
- "17u",
- "baseSe",
- "bytravel",
- "daodao",
- "go2eu",
- "lotour",
- "lvping",
- "mafengwo",
- "sina",
- "sohu",
- "system.indexes"
- ]
- > show dbs
- admin 0.03125GB
- local (empty)
- pagedb 0.03125GB
- test 0.03125GB
- > use LuceneIndexDB
- switched to db LuceneIndexDB
- > show dbs
- admin 0.03125GB
- local (empty)
- pagedb 0.03125GB
- test 0.03125GB
- > db
- LuceneIndexDB
- > db.storeCollection.save({'version':'3.5', 'segment':'e3ol6'})
- > show dbs
- LuceneIndexDB 0.03125GB
- admin 0.03125GB
- local (empty)
- pagedb 0.03125GB
- test 0.03125GB
- >
- > db.createCollection('replicationColletion', {'capped':true, 'size':10240, 'max':17855200})
- { "ok" : 1 }
- > show collections
- replicationColletion
- storeCollection
- system.indexes
4、删除集合
删除集合,可以执行db.mycoll.drop()。
5、插入更新记录
直接使用集合的save方法,如下所示:
- > <em>db.storeCollection.save({'version':'3.5', 'segment':'e3ol6'})</em>
更新记录,使用save会将原来的记录值进行覆盖实现记录更新。
6、查询一条记录
使用findOne()函数,参数为查询条件,可选,系统会随机查询获取到满足条件的一条记录(如果存在查询结果数量大于等于1)示例如下所示:
- > db.storeCollection.findOne({'version':'3.5'})
- {
- "_id" : ObjectId("4ef970f23c1fc4613425accc"),
- "version" : "3.5",
- "segment" : "e3ol6"
- }
使用find()函数,参数指定查询条件,不指定条件则查询全部记录。
8、删除记录
使用集合的remove()方法,参数指定为查询条件,示例如下所示:
- > db.storeCollection.remove({'version':'3.5'})
- > db.storeCollection.findOne()
- null
可以使用集合的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 }
使用db.system.indexes.find()可以查询全部索引。
10、查询索引
我们为集合建立的索引,那么可以通过集合的getIndexes()方法实现查询,示例如下所示:
- > db.page.getIndexes()
- [
- {
- "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
- }
- ]
11、删除索引
删除索引给出了两个方法:
- db.mycoll.dropIndex(name)
- db.mycoll.dropIndexes()
12、索引重建
可以通过集合的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
- }
13、统计集合记录数
use fragment
db.baseSe.count()
统计结果,如下所示:
- > use fragment
- switched to db fragment
- > db.baseSe.count()
- 36749
14、查询并统计结果记录数
use fragment
db.baseSe.find().count()
find()可以提供查询参数,然后查询并统计结果,如下所示:
- > use fragment
- switched to db fragment
- > db.baseSe.find().count()
- 36749
15、查询指定数据库的集合当前可用的存储空间
use fragment
> db.baseSe.storageSize()
142564096
16、查询指定数据库的集合分配的存储空间
> db.baseSe.totalSize()
144096000
上述查询结果中,包括为集合(数据及其索引存储)分配的存储空间。
(三)启动与终止
(四)安全管理
1、以安全认证模式启动
或者,也可以修改/etc/mongodb.conf,设置auth=true,重启mongod进程。
- {
- "user" : "admin",
- "readOnly" : false,
- "pwd" : "995d2143e0bf79cba24b58b3e41852cd"
- }
- {
- "user" : "admin",
- "readOnly" : false,
- "pwd" : "995d2143e0bf79cba24b58b3e41852cd"
- }
- db.system.users.find()
- { "_id" : ObjectId("4ef940a13c1fc4613425acc8"), "user" : "admin", "readOnly" : false, "pwd" : "995d2143e0bf79cba24b58b3e41852cd" }
- db.system.users.find()
- error: {
- "$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1", "code" : 10057
- }
说明:
- {
- "info" : "now locked against writes, use db.$cmd.sys.unlock.findOne() to unlock",
- "ok" : 1
- }
- {
- "inprog" : [ ],
- "fsyncLock" : 1,
- "info" : "use db.$cmd.sys.unlock.findOne() to terminate the fsync write/snapshot lock"
- }
db.$cmd.sys.unlock.findOne()
- { "ok" : 1, "info" : "unlock requested" }
db.currentOp()
状态信息如下:
- { "inprog" : [ ] }
(五)数据备份、恢复与迁移管理
cd testbak
mongodump
2、备份指定数据库
mongodump -d pagedb
mongorestore --drop
mongorestore -d pagedb --drop
说明:将备份的pagedb的数据恢复到数据库。
mongorestore -d pagedb -c page --drop
说明:将备份的pagedb的的page集合的数据恢复到数据库。
--type支持的类型有三个:csv、tsv、json
其他各个选项的使用,可以查看帮助:
- mongoimport --help
- options:
- --help produce help message
- -v [ --verbose ] be more verbose (include multiple times for more
- verbosity e.g. -vvvvv)
- -h [ --host ] arg mongo host to connect to ( <set name>/s1,s2 for sets)
- --port arg server port. Can also use --host hostname:port
- --ipv6 enable IPv6 support (disabled by default)
- -u [ --username ] arg username
- -p [ --password ] arg password
- --dbpath arg directly access mongod database files in the given
- path, instead of connecting to a mongod server -
- needs to lock the data directory, so cannot be used
- if a mongod is currently accessing the same path
- --directoryperdb if dbpath specified, each db is in a separate
- directory
- -d [ --db ] arg database to use
- -c [ --collection ] arg collection to use (some commands)
- -f [ --fields ] arg comma separated list of field names e.g. -f name,age
- --fieldFile arg file with fields names - 1 per line
- --ignoreBlanks if given, empty fields in csv and tsv will be ignored
- --type arg type of file to import. default: json (json,csv,tsv)
- --file arg file to import from; if not specified stdin is used
- --drop drop collection first
- --headerline CSV,TSV only - use first line as headers
- --upsert insert or update objects that already exist
- --upsertFields arg comma-separated fields for the query part of the
- upsert. You should make sure this is indexed
- --stopOnError stop importing at first error rather than continuing
- --jsonArray load a json array, not one item per line. Currently
- limited to 4MB.
说明:将pagedb数据库中page集合的数据导出到pages.csv文件,其中各选项含义:
-f 指定cvs列名为_id,title,url,spiderName,pubDate
-q 指定查询条件
其他各个选项的使用,可以查看帮助:
- mongoexport --help
- options:
- --help produce help message
- -v [ --verbose ] be more verbose (include multiple times for more verbosity e.g. -vvvvv)
- -h [ --host ] arg mongo host to connect to ( <set name>/s1,s2 for sets)
- --port arg server port. Can also use --host hostname:port
- --ipv6 enable IPv6 support (disabled by default)
- -u [ --username ] arg username
- -p [ --password ] arg password
- --dbpath arg directly access mongod database files in the given
- path, instead of connecting to a mongod server -
- needs to lock the data directory, so cannot be used
- if a mongod is currently accessing the same path
- --directoryperdb if dbpath specified, each db is in a separate directory
- -d [ --db ] arg database to use
- -c [ --collection ] arg collection to use (some commands)
- -f [ --fields ] arg comma separated list of field names e.g. -f name,age
- --fieldFile arg file with fields names - 1 per line
- -q [ --query ] arg query filter, as a JSON string
- --csv export to csv instead of json
- -o [ --out ] arg output file; if not specified, stdout is used
- --jsonArray output to a json array rather than one object per line
- mongoexport -d page -c Article -q '{"spiderName": "mafengwoSpider"}' -f _id,title,content,images,publishDate,spiderName,url --jsonArray > mafengwoArticle.txt
- ERROR: too many positional options
(六)远程连接管理
- mongo -u admin -p admin 192.168.0.197:27017/pagedb
- mongo --help
- MongoDB shell version: 1.8.3
- usage: mongo [options] [db address] [file names (ending in .js)]
- db address can be:
- foo foo database on local machine
- 192.169.0.5/foo foo database on 192.168.0.5 machine
- 192.169.0.5:9999/foo foo database on 192.168.0.5 machine on port 9999
- options:
- --shell run the shell after executing files
- --nodb don't connect to mongod on startup - no 'db address'
- arg expected
- --quiet be less chatty
- --port arg port to connect to
- --host arg server to connect to
- --eval arg evaluate javascript
- -u [ --username ] arg username for authentication
- -p [ --password ] arg password for authentication
- -h [ --help ] show this usage information
- --version show version information
- --verbose increase verbosity
- --ipv6 enable IPv6 support (disabled by default)
- > var x = new Mongo('192.168.0.197:27017')
- > var ydb = x.getDB('pagedb');
- > use ydb
- switched to db ydb
- > db
- ydb
- > ydb.page.findOne()
- {
- "_id" : ObjectId("4eded6a5bf3bfa0014000003"),
- "content" : "巴黎是浪漫的城市,可是...",
- "pubdate" : "2006-03-19",
- "title" : "巴黎:从布鲁塞尔赶到巴黎",
- "url" : "http://france.bytravel.cn/Scenery/528/cblsegdbl.html"
- }
- > var x = new Mongo('192.168.0.197:27017')
- > var ydb = x.getDB('pagedb', 'shirdrn', '(jkfFS$343$_\=\,.F@3');
- > use ydb
- switched to db ydb
相关推荐
以下是从给定的标题、描述和标签中提取的MongoDB基本命令和实例的详细说明: 1. **显示数据库**: `show dbs` 命令用来列出当前MongoDB服务器上已存在的所有数据库,以及它们占用的空间大小。 2. **切换数据库**...
MongoDB 的管理命令是通过其命令行界面(Mongo Shell)执行的。Mongo Shell 提供了一个交互式的 JavaScript 环境,用于连接到 MongoDB 服务器并执行各种管理任务。以下是一些常见的 MongoDB 管理命令: 1. `help`:...
### MongoDB常用命令详解 #### 一、数据库管理 ...以上是MongoDB常用的一些命令,涵盖了数据库管理、聚集集合管理、用户管理和查询操作等方面的基础知识。掌握这些命令可以帮助您更好地管理和操作MongoDB数据库。
在本文中,我们将深入探讨MongoDB的一些常用管理命令,这些命令对于日常运维和管理至关重要。 首先,要启动MongoDB服务,你需要在命令行环境中运行`mongod`服务。进入MongoDB安装目录的`bin`子目录,使用以下命令:...
4. CRUD操作:创建(Create)、读取(Read)、更新(Update)、删除(Delete)是数据库操作的基础,MongoDB提供了丰富的命令来支持这些操作。 5. 查询语言:MongoDB使用MQL(MongoDB Query Language)进行查询,它...
在MongoDB中,管理和操作数据库的基本命令是: 1. **查询所有数据库列表**:`show dbs` 这个命令会列出当前MongoDB实例中存在的所有数据库。如果数据库为空,它只会显示默认的`local`数据库。 2. **查看当前数据库...
MongoDB的`runCommand`命令是数据库操作中的一个...理解并熟练使用这些命令对于MongoDB的管理和维护至关重要。在实际操作中,根据具体需求选择合适的`runCommand`命令,可以有效地提升工作效率并确保数据库的健康运行。
`db.tablename.findOne({})` 是MongoDB中最基本的查询命令之一。其格式如下: ```javascript db.collectionName.findOne(query, fields) ``` - **collectionName**:表示要查询的集合名称。 - **query**:查询条件...
总的来说,理解并熟练运用这些MongoDB操作命令对于高效地管理和处理数据至关重要。随着NoSQL数据库的普及,MongoDB因其强大的功能和易用性,已经成为很多企业和开发者的选择。通过不断学习和实践,你将能够更好地...
MongoDB 是一个流行的开源文档型数据库,用于存储和...以上命令涵盖了MongoDB的基本操作,对于日常管理和维护MongoDB数据库非常实用。通过熟练掌握这些命令,你可以有效地管理数据、优化查询性能并确保数据的安全性。
同时,还需要安装 MongoDB VUE,以便更好地管理和维护 MongoDB。 ### Linux 环境下安装 MongoDB 1. 下载 MongoDB Linux 版 2. 设置数据文件和日志文件的存放目录 3. 启动 MongoDB 服务 4. 将 MongoDB 作为 Linux ...
MongoDB 提供了`help`命令来获取基本操作的提示。例如,输入`db.help()`将显示当前数据库的操作命令,而`db.collectionName.help()`则会显示特定集合的操作命令,如`db.foo.help()`针对名为`foo`的集合。 **数据库...
MongoDB提供了许多高级功能和选项,如索引、分片、复制集、事务等,以满足更复杂的数据管理和处理需求。 - **索引**:通过创建索引来加速查询速度。 - **分片**:将大数据集分布在多个服务器上,提高可伸缩性和性能...
MongoDB基本操作 MongoDB是一个基于分布式文件存储的NoSQL数据库,具有高性能、可扩展性强、易于使用等特点。下面将详细介绍MongoDB的基本操作。 一、启动和停止MongoDB 1. 启动MongoDB:使用以下命令启动MongoDB...
### MongoDB基本操作详解 #### MongoDB简介 MongoDB是一款开源的NoSQL数据库系统,以其灵活性、高性能及可扩展性著称,特别适用于Web应用的开发。MongoDB的数据模型基于文档,这意味着它存储的数据形式类似于JSON...
在这个“MongoDB基本操作”的主题中,我们将深入探讨如何使用MongoDB进行数据的增删改查以及其它关键操作。 1. **安装与启动MongoDB** - 在不同的操作系统(如Windows、Linux或macOS)上安装MongoDB的步骤略有不同...
在使用MongoDB Shell时,有一些基本的命令可以用于数据库的管理和操作。例如,showdbs 或 show databases 命令可以用来查看当前服务器上的所有数据库。use命令用于选择数据库,如果数据库不存在,则会新建数据库。db...
### MongoDB常见操作命令详解 MongoDB 是一款非常流行的开源文档型数据库...以上是MongoDB中常用的命令概述,通过这些命令可以实现对数据库的基本管理和数据操作。掌握这些命令对于高效使用MongoDB来说是非常重要的。
MongoDB 是一种流行的开源、非关系型数据库管理系统,它以JSON格式存储数据,适用于处理大量半结构化或非结构化数据。本篇资料主要涵盖了MongoDB的基本查询操作,包括查询数据、格式化输出、筛选特定文档以及使用...