且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MongoDB实战(2)工具集与特殊魔术方法

更新时间:2022-09-23 11:41:00

一、MongoDB启动方式

MongoDB除了支持命令行的启动方式还支持配置文件启动通过读取启动配置文件的方式来启动数据库比方说配置文件如下

MongoDB实战(2)工具集与特殊魔术方法

则可以使用如下命令

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

MongoDB参数说明

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时的临时目录。在如果没有开启journal异常down机后重启必须执行repair
操作。

停止数据库这里有一点需要注意

使用kill-2或者pkill都可以但是不要使用kill-9来杀死MongoDB进程这样会导致MongoDB的数据损坏。

二、常用工具集

MongoDB在bin目录下提供了一系列有用的工具这些工具提供了MongoDB在运维管理上
的方便。
bsondump:将bson格式的文件转储为json格式的数据
mongo:客户端命令行工具其实也是一个js解释器支持js语法
mongod:数据库服务端每个实例启动一个进程可以fork为后台运行
mongodump/mongorestore:数据库备份和恢复工具
mongoexport/mongoimport:数据导出和导入工具
mongofiles:GridFS管理工具可实现二制文件的存取
mongos:分片路由如果使用了sharding功能则应用程序连接的是mongos而不是
mongod
mongosniff:这一工具的作用类似于tcpdump不同的是他只监控MongoDB相关的包请
求并且是以指定的可读性的形式输出
mongostat:实时性能监控工具

三、一些很重要的魔术方法

1、$all匹配所有
这个操作符跟SQL语法的in类似但不同的是,in只需满足()内的某一个值即可,而$all必
须满足[]内的所有值例如:
db.users.find({age:{$all:[6,8]}});
可以查询出{name:'David',age:26,age:[6,8,9]}
但查询不出{name:'David',age:26,age:[6,7,9]}

2、$mod取模运算
查询age取模10等于0的数据
db.student.find({age:{$mod:[10,1]}})
举例如下:
C1表的数据如下:

1
2
3
4
> db.c1.find()
"_id" : ObjectId("4fb4af85afa87dc1bed94330"), "age" : 7, "length_1" : 30 }
"_id" : ObjectId("4fb4af89afa87dc1bed94331"), "age" : 8, "length_1" : 30 }
"_id" : ObjectId("4fb4af8cafa87dc1bed94332"), "age" : 6, "length_1" : 30 }

查询age取模6等于1的数据

1
2
> db.c1.find({age: {$mod : [ 6 , 1 ] } })
"_id" : ObjectId("4fb4af85afa87dc1bed94330"), "age" : 7, "length_1" : 30 }

可以看出只显示出了age取模6等于1的数据其它不符合规则的数据并没有显示出来

3、$size数组元素个数
对于{name:'David',age:26,favorite_number:[6,7,9]}记录
匹配db.users.find({favorite_number:{$size:3}});
不匹配db.users.find({favorite_number:{$size:2}});

4、$slice取数组中指定段的记录

db.posts.find({},{comments:{$slice:5}})
db.posts.find({},{comments:{$slice:[20,10]}})

MongoDB实战(2)工具集与特殊魔术方法

5、$看实例吧

{"_id":1,"semester":1,"grades":[70,87,90]}

{"_id":2,"semester":1,"grades":[90,88,92]}

{"_id":3,"semester":1,"grades":[85,100,90]}

{"_id":4,"semester":2,"grades":[79,85,80]}

{"_id":5,"semester":2,"grades":[88,88,92]}

{"_id":6,"semester":2,"grades":[95,90,96]}

db.students.find({semester:1,grades:{$gte:85}},{"grades.$":1})

结果这样

{"_id":1,"grades":[87]}

{"_id":2,"grades":[90]}

{"_id":3,"grades":[85]}

四、存储过程

MongoDB存储过程是存储在db.system.js表中的我们想象一个简单的sql自定义函数如下

存储过程的定义查看和执行

MongoDB实战(2)工具集与特殊魔术方法


















本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1322792,如需转载请自行联系原作者