第一部分 基础篇 第四章 MongoDB快速入门
声明:该文章主要来自《MongoDB实战》一书内容,主要想通过该书学习MongoDB的相应知识,加深理解,故写在自己的博文当中,作为记录,在最后的章节中,会有一个自己集合MongoDB数据库应用的JavaEE的web应用。
MongoDB shell是MongoDB自带的交互式JavaScript shell,用来对MongoDB进行操作和管理的交互式环境。
使用./mongo --help可以查看相关连接参数,下面将从常见的操作,如插入、查询、修改、删除等几个方面阐述MongoDB shell的用法。
1.1、启动数据库
MongoDB安装、配置完后,必须先启动它,然后才能使用它,怎么启动它呢?下面分别展示了3种方式启动实例。
1.1.1、命令行方式启动
MongoDB默认存储数据目录为/data/db/(或者C:\data\db),默认端口为27017,默认HTTP端口为28017,当然你也可以修改成不同目录,只需要指定dbpath参数:
./mongod --dbpath=/var/mongodb/data/ --logpath /var/mongodb/logs/log.log -fork
说明:--fork表示后台进程启动。1.1.2、配置文件方式启动
如果是一个专业的DBA,那么实例启动时会添加很多的参数以便使系统运行的非常稳定,这样就可以会在启动时在mongod后面加一长串的参数,看起来非常混乱而且不好管理和维护,那么有什么办法让这些参数有条理呢?MongoDB也支持同mysql一样的读取启动配置文件的方式来启动数据库,配置文件的内容如下:
[root@localhost bin]# vi /etc/mongodb.cnf
dbpath=/var/mongodb/data/
启动时加上-f参数,并指向配置文件即可
[root@localhost bin]# ./mongod -f /etc/mongodb.cnf
1.1.3、Daemon方式启动
大家可以注意到上面的两种方式都在前台启动MongDB进程,但当启动MongoDB进程的session窗口不小心关闭时,MongoDB进程也将随之停止,这样无疑是非常不安全的,幸好MongoDB提供了一种后台Daemon方式启动的选择,只需要加上一个--fork参数即可,这就使得我们可以更方便的操作数据库的启动,但如果用到了--fork参数就必须也启动--logpath参数,这是强制的。
./mongod --dbpath=/var/mongodb/data/ --logpath /var/mongodb/logs/log.log -fork
没有--logpath参数,则会提示:--fork has to be used with --logpath
1.1.4、MongoDB参数说明
最简单的、通过执行mongod即可启动MongoDB数据库服务,mongod支持很多的参数,但都有默认值,其中最重要的是需要制定数据文件路径,或者确保默认的/data/db/存在并且具有访问权限,否则启动后会自动关闭服务,那也就是说,只要确保dbpath就可以启动MongoDB服务了。
mongod的主要参数有:
- dbpath:数据文件存放路径,每个数据库会在启动创建一个子目录,用于防止同一个实例多次运行的mongod.lock也保存在此目录中。
- logpath:错误日志文件。
- logappend:错误日志采用追加模式(默认是覆写模式)
- bind_ip:对外服务的绑定ip,一般设置为空,以及绑定在本机所有可用ip上,如有需要可以单独制定。
- port:对外服务端口,web管理端口在这个port的基础上+1000。
- fork:以后台Daemon形式运行服务。
- journal:开启日志功能,通过保存操作日志类降低单机故障的恢复时间,在1.8版本后正式加入,取代在1.7.5版本中的dur参数。
- syncdelay:系统同步刷新磁盘的时间,单位为秒,默认是60秒。
- directoryperdb:每个db存放在单独的目录中,建议设置该参数,域MySQL的独立表空间类似。
- maxConns:最大连接数。
- repairpath:执行repair时的临时目录,在如果没有开启joural,异常down机后重启,必须执行repair操作。
MongoDB shell version: 2.6.6
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
> ^C
bye
[root@localhost bin]#
[root@localhost bin]# ./mongo
MongoDB shell version: 2.6.6
connecting to: test
> use admin
switched to db admin
> db.shutdownServer()
2015-01-04T10:23:44.506+0800 DBClientCursor::init call() failed
server should be down...
2015-01-04T10:23:44.519+0800 trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2015-01-04T10:23:44.521+0800 warning: Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2015-01-04T10:23:44.521+0800 reconnect 127.0.0.1:27017 (127.0.0.1) failed failed couldn‘t connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
>
[root@localhost bin]# ps aux|grep mongod
root 2676 1.4 3.0 467208 30668 ? Sl 10:24 0:00 ./mongod --dbpath=/var/mongodb/data/ --logpath /var/mongodb/logs/log.log -fork
root 2695 0.0 0.0 103236 864 pts/1 S+ 10:24 0:00 grep mongod
MongoDB shell version: 2.6.6
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
>
{ "name" : "mongo" }
> b={x:4}
{ "x" : 4 }
> db.xuz.save(a)
WriteResult({ "nInserted" : 1 })
> db.xuz.save(b)
WriteResult({ "nInserted" : 1 })
> db.xuz.find();
{ "_id" : ObjectId("54a8a4ff2db3e1b27d0e5203"), "name" : "mongo" }
{ "_id" : ObjectId("54a8a5042db3e1b27d0e5204"), "x" : 4 }
说明:
- 不需要预先创建一个集合,在第一次插入数据时会自动创建。
- 在文档中其实可以存储任何结构的数据,当然在实际应用我们存储的还是相同类型文档的集合,这个特性其实可以在应用里很灵活,你不需要类似alter table语句来修改你的数据结构。
- 每次插入数据时候集合中会有一个ID,名字叫_id。
WriteResult({ "nInserted" : 1 })
> db.xuz.find();
{ "_id" : ObjectId("54a8a4ff2db3e1b27d0e5203"), "name" : "mongo" }
{ "_id" : ObjectId("54a8a5042db3e1b27d0e5204"), "x" : 4 }
{ "_id" : ObjectId("54a8a5a427681683ca2c2466"), "x" : 5, "j" : 1 }
{ "_id" : ObjectId("54a8a5a427681683ca2c2467"), "x" : 5, "j" : 2 }
{ "_id" : ObjectId("54a8a5a427681683ca2c2468"), "x" : 5, "j" : 3 }
{ "_id" : ObjectId("54a8a5a427681683ca2c2469"), "x" : 5, "j" : 4 }
{ "_id" : ObjectId("54a8a5a427681683ca2c246a"), "x" : 5, "j" : 5 }
{ "_id" : ObjectId("54a8a5a427681683ca2c246b"), "x" : 5, "j" : 6 }
{ "_id" : ObjectId("54a8a5a427681683ca2c246c"), "x" : 5, "j" : 7 }
{ "_id" : ObjectId("54a8a5a427681683ca2c246d"), "x" : 5, "j" : 8 }
{ "_id" : ObjectId("54a8a5a427681683ca2c246e"), "x" : 5, "j" : 9 }
{ "_id" : ObjectId("54a8a5a427681683ca2c246f"), "x" : 5, "j" : 10 }
{ "_id" : ObjectId("54a8a620e708df7187eb2dd8"), "x" : 5, "j" : 1 }
{ "_id" : ObjectId("54a8a620e708df7187eb2dd9"), "x" : 5, "j" : 2 }
{ "_id" : ObjectId("54a8a620e708df7187eb2dda"), "x" : 5, "j" : 3 }
{ "_id" : ObjectId("54a8a620e708df7187eb2ddb"), "x" : 5, "j" : 4 }
{ "_id" : ObjectId("54a8a620e708df7187eb2ddc"), "x" : 5, "j" : 5 }
{ "_id" : ObjectId("54a8a620e708df7187eb2ddd"), "x" : 5, "j" : 6 }
{ "_id" : ObjectId("54a8a620e708df7187eb2dde"), "x" : 5, "j" : 7 }
{ "_id" : ObjectId("54a8a620e708df7187eb2ddf"), "x" : 5, "j" : 8 }
Type "it" for more
{ "_id" : ObjectId("54a8a620e708df7187eb2de0"), "x" : 5, "j" : 9 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de1"), "x" : 5, "j" : 10 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de2"), "x" : 5, "j" : 11 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de3"), "x" : 5, "j" : 12 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de4"), "x" : 5, "j" : 13 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de5"), "x" : 5, "j" : 14 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de6"), "x" : 5, "j" : 15 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de7"), "x" : 5, "j" : 16 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de8"), "x" : 5, "j" : 17 }
{ "_id" : ObjectId("54a8a620e708df7187eb2de9"), "x" : 5, "j" : 18 }
{ "_id" : ObjectId("54a8a620e708df7187eb2dea"), "x" : 5, "j" : 19 }
{ "_id" : ObjectId("54a8a620e708df7187eb2deb"), "x" : 5, "j" : 20 }
{ "_id" : ObjectId("54a8a621e708df7187eb2dec"), "x" : 5, "j" : 21 }
{ "_id" : ObjectId("54a8a621e708df7187eb2ded"), "x" : 5, "j" : 22 }
{ "_id" : ObjectId("54a8a621e708df7187eb2dee"), "x" : 5, "j" : 23 }
{ "_id" : ObjectId("54a8a621e708df7187eb2def"), "x" : 5, "j" : 24 }
{ "_id" : ObjectId("54a8a621e708df7187eb2df0"), "x" : 5, "j" : 25 }
{ "_id" : ObjectId("54a8a621e708df7187eb2df1"), "x" : 5, "j" : 26 }
{ "_id" : ObjectId("54a8a621e708df7187eb2df2"), "x" : 5, "j" : 27 }
{ "_id" : ObjectId("54a8a621e708df7187eb2df3"), "x" : 5, "j" : 28 }
Type "it" for more
> db.xuz.find();
{ "_id" : ObjectId("54a8a4ff2db3e1b27d0e5203"), "name" : "mongo" }
{ "_id" : ObjectId("54a8a5042db3e1b27d0e5204"), "x" : 4 }
{ "_id" : ObjectId("54a8a621e708df7187eb2e09"), "x" : 5, "j" : 50 }
{ "_id" : 3, "name" : "zhangsan" }
2015-01-04T10:41:26.289+0800 ReferenceError: zhaoliu is not defined
> db.xuz.insert({_id:3,"name":"zhaoliu"});
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.xuz.$_id_ dup key: { : 3.0 }"
}
})
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。