服务
启动
cd mongodb/bin
./mongod --config mongodb.conf
mongodb.conf的内容如下:
dbpath=/mongodb_absolute_path/mongodb/db
logpath=/mongodb_absolute_path/mongodb/logs/mongodb.log
port=27017
fork=true
nohttpinterface=true
关闭
./mongo -host ip:port #进入mongodb
>use admin #使用admin库
>db.shutdownServer(); #关闭服务
基本操作
全局
help #mongodb支持的命令
show dbs #查看所有数据库
use test #使用 test 库
db #查看当前连接在哪个数据库
db.dropDatabase() #删除当前的数据库
db.test.drop() #删除collection test
db.help() #当前数据库支持哪些方法
db.test.help() #当前数据库下的表支持的方法
show collections #查看所有的collection
存储
db.test.save(...)
删除
db.test.remove({'yy':5}) #删除yy=5的记录
db.test.remove({}) #删除所有的记录
释放存储
mongoldb删除记录后存储并不会释放
如果要释放存储可以:先删除记录,再导出数据,再导入数据
remove…
mongodump -o path
mongorestore -d database_name path
修改
根据query条件修改,如果不存在则插入,允许修改多条记录
db.test.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)
查找
db.test.find() #查找所有
db.test.findOne() #查找一条记录
db.test.find({'msg':'Hello 1'}).limit(10) #根据条件检索10条记录
模糊查询
tname字段包含关键字“aa”
db.test.find({"tname": {$regex: 'aa', $options:'i'}})
db.test.find({"tname": {$regex:/aa.*/i}})
逻辑查询
-
大于,小于,大于或等于,小于或等于
$gt:大于(greater than)
$lt :小于(less than)
$gte:大于或等于(greater than or equal to)
$lte :小于或等于(less than or equal to)db.test.find({ "field" : { $gt: value } } ); db.test.find({ "field" : { $lt: value } } ); db.test.find({ "field" : { $gte: value } } ); db.test.find({ "field" : { $lte: value } } ); # 分别查询大于3,小于4: db.test.find({ "field" : { $gt: 3}}); db.test.find({ "field" : { $lt: 4}}); # 查询同时大于3,小于4: db.test.find({ "field" : { $gt: 3, $lt: 4} } );
-
不等于 $ne
db.test.find( { "field" : { $ne : 3 } } );
-
in 和 not in ($in $nin)
db.test.find({ "field" : { $in : array } } ); eg: db.test.find({ "field" : { $in: [2,4,6]}}); db.test.find({ "field" : { $nin: [2,4,6]}});
-
取模运算($mod)
如下面的运算: db.test.find( "this.a % 10 == 1") 可用$mod代替: db.test.find( { a : { $mod : [ 10 , 1 ] } } )
-
$all
$all和$in类似,但是他需要匹配条件内所有的值:
如有一个对象:
{ a: [ 1, 2, 3 ] }
下面这个条件是可以匹配的:db.test.find( { "field" : { $all: [ 2, 3 ] } } );
但是下面这个条件就不行了:
db.test.find( { "field" : { $all: [ 2, 3, 4 ] } } );
-
$exists
$exists用来判断一个元素是否存在:db.test.find( { "field" : { $exists : true } } ); // 如果存在元素a,就返回 db.test.find( { "field" : { $exists : false } } ); // 如果不存在元素a,就返回
-
正则表达式
db.test.find( { "field" : /acme.*corp/i } ); // 后面的i的意思是区分大小写
导入导出
首先定义导入导出基本上会用到的参数:ip、port、user、pwd
[normal] = [-h ip] [—-port port] [-u user] [-p pwd]
导出库
./mongodump [normal] [-d dbname] -o path
-d:有则导出制定库,无则导出所有库
导入库
./mongorestore [normal] [-d dbname] [--drop] path
--drop:先删除当前数据,然后恢复备份的数据,慎用
导出表
./mongoexport [normal] -d dbname -c 表名 -f 字段 -q 条件 -o 文件
eg:
./mongoexport -d test -c students -o students.dat
./mongoexport -d test -c students --csv -f classid,name,age -q '{"age":30}' -o students_csv.dat
导入表
./mongoimport [normal] -d dbname -c 表名 --upsert 字段 --drop 文件
--upsert 插入或者更新现有数据,和--upsertFields一样
eg:
./mongoimport -d test -c students students.dat
./mongoimport -d test -c students --upsertFields classid,name,age students_csv.dat
./mongoimport -d test -c students --type csv --headerline --file students_csv.dat
—-type:指明要导入的文件格式
—-headerline:指明第一行是列名,不需要导入
—-file:指明要导入的文件
附录
启动参数
--quiet # 安静输出
--port arg # 指定服务端口号,默认端口27017
--bind_ip arg # 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP
--logpath arg # 指定MongoDB日志文件,注意是指定文件不是目录
--logappend # 使用追加的方式写日志
--pidfilepath arg # PID File 的完整路径,如果没有设置,则没有PID文件
--keyFile arg # 集群的私钥的完整路径,只对于Replica Set 架构有效
--unixSocketPrefix arg # UNIX域套接字替代目录,(默认为 /tmp)
--fork # 以守护进程的方式运行MongoDB,创建服务器进程
--auth # 启用验证
--cpu # 定期显示CPU的CPU利用率和iowait
--dbpath arg # 指定数据库路径
--diaglog arg # diaglog选项 0=off 1=W 2=R 3=both 7=W+some reads
--directoryperdb # 设置每个数据库将被保存在一个单独的目录
--journal # 启用日志选项,MongoDB的数据操作将会写入到journal文件夹的文件里
--journalOptions arg # 启用日志诊断选项
--ipv6 # 启用IPv6选项
--jsonp # 允许JSONP形式通过HTTP访问(有安全影响)
--maxConns arg # 最大同时连接数 默认2000
--noauth # 不启用验证
--nohttpinterface # 关闭http接口,默认关闭27018端口访问
--noprealloc # 禁用数据文件预分配(往往影响性能)
--noscripting # 禁用脚本引擎
--notablescan # 不允许表扫描
--nounixsocket # 禁用Unix套接字监听
--nssize arg (=16) # 设置信数据库.ns文件大小(MB)
--objcheck # 在收到客户数据,检查的有效性,
--profile arg # 档案参数 0=off 1=slow, 2=all
--quota # 限制每个数据库的文件数,设置默认为8
--quotaFiles arg # number of files allower per db, requires --quota
--rest # 开启简单的rest API
--repair # 修复所有数据库run repair on all dbs
--repairpath arg # 修复库生成的文件的目录,默认为目录名称dbpath
--slowms arg (=100) # value of slow for profile and console log
--smallfiles # 使用较小的默认文件
--syncdelay arg (=60) # 数据写入磁盘的时间秒数(0=never,不推荐)
--sysinfo # 打印一些诊断系统信息
--upgrade # 如果需要升级数据库