mongoDB基本操作
/* @author:luowen @time:2013-08-01 [mongoDB] 1.mongoDB安装 下载mongodb-linux-i686-2.2.5.tgz tar -zxvf mongodb-linux-i686-2.2.5.tgz 将其拷贝到/usr/local/mongodb 在mongodb目录下创建data log 目录 进入 bin ./mongod --dbpath=/usr/local/mongodb/data --logpath=/usr/local/mongodb/logs --fork 启动服务 //可以将这个语句添加到/etc/init/local文件中每次自动启动 ./mongo 进入数据库使用 2.一些基本的操作 db.c1.find().sort({age:1}).skip(2).limit(3).count(1); $all :查询包含的 {name:'luowen',post:[1,23,4,5]} db.c1.find({post:{$all:[1,2]}}) --> true; db.c1.find({post:{$all:[1,2,4]}}) --> false; $exists 测试一个字段是否存在 xx.xx.find({$exists:[post]}) $mod 取余 xx.xx.find({id:{$mod:[1,2,]}}) $ne 不等于 xx.xx.find({id:{$ne:[1,2,3,2]}}) $in xx.xx.find({id:{$in:[12,12,2,2]}}); $nin xx.xx.find({id:{$nin:[1,2,3,4,5,5]}}) $or 名字是user1或者age是1的记过 xx.xx.find({$or:[{name:'user1',age:1}]}) $nor 名字不是user1 age不是1的 xx.xx.find({$nor:[{name:'user1',age:1}]) $size 去除post的值是3的数据 xx.xx.insert({post:[1,2,3]}) xx.xx.find({post:{$size:3}}) $skip $limit 实现分页 $elemMatch 元素匹配 匹配数组arr中id为3的值 xx.xx.find({arr:{$elemMathc:{id:3}}}) 游标 x = xx.xx.find() x.hasNext() 判断 x.next() 取出内容 $slice xx.xx.find({name:'user'},{post:{$slice:3}}) 去出前三篇帖子 [update] $set 保存原有的格式,然后在修改 xx.xx.update({name:'user1'},{$set:{age:30}}) 给user1的用户添加了一个字段age $inc 自增 $unset删除不需要的字段xx.xx.update({},{$unset:{score:1}},0,1);删除score字段 $push 压入数据到collections中 xx.xx.update({name:'user1'},{$push:{arr:8}},0,1); $pushAll 同事压入多个数据 xx.xx.update({name:'user1'},{$pushAll:{arr:[2,32,12,21,1212]}});同时压入多个数据 $addToSet 当表中存在时,就压入,如有重复就不压入 xx.xx.update({name:'user1'},{$addToSet:{arr:12}}) 如果arr中存在12,则不压入,不存在则压入 $pop 删除数组中最后一个元素 xx.xx.update({name:'user1'},{$pop:{$arr:1}}); $pull 只能操作数组 xx.xx.update({name:'user1'},{$pull:{arr:4}})删除数组arr中值为4的键 $pullAll 删除多个xx.xx.update({name:'user1'},{$pullAll:{arr:[4,5]}})同事删除4和5值 $rename更改字段名字xx.xx.update({name:'user1'},{$rename:{arr:'post'}})把arr字段更改为post $bit 位运算 特殊操作符号 $ {'id':'213','arr':[{'title':'linux'},{'title':'java'},{'title':'php'}]}在arr数组中的title为linux的结果集中添加一个cont字段 xx.xx.update({'arr.title':'linux'},{'arr.$.cnt':'linux is very good!'}); res {'id':'213','arr':[{'title':'linux','cnt':'linux is very good'},{'title':'java'},{'title':'php'}]} db.dropDatabase() //删除数据库 db.collections.drop //删除集合 db.createCollection('c1') //穿件一个集合 db.createCollection('c2',{capped:true,size:1000,max:5}) //创建一个固定结合只能放5个json多了就把前面的推出去 db.runCommand({convertToCapped:'c1',size:1000,max:4}); //将c1转化成一个固定集合 GridFS一个大文件系统 ./mongofiles put 文件名 ./mongofiles get 文件名 ./mongofiles delete 文件名 ./mongofiles list 列出上传文件 db.fs.files.find(); //查找信息 db.fs.files.remove(); //移除信息 db.fs.chunks.find() //查看源文件 db.fs.chunks.remove() //删除源文件 [性能篇] 查看一个语句的影响行数 db.c1.find({name:'user'}).explain(); 增加一个索引 db.c1.ensureIndex({name:true},{background:true}) //在后台建立name的索引 查看索引 db.c1.getIndexes(); 查看索引键 db.c1.getIndexKeys(); 添加一个唯一索引 db.c1.ensureIndex({age:1},{unique:1}); //给age创建了一个唯一索引 删除索引 db.c1.dropIndex({age:1}) //删除age的索引 db.c1.dropIndexes();//删除所有的索引,除id一歪 [慢查询日志] 启动的时候 添加 --profile=[0,1,2] 0:不记录 1:记录慢查询日志 2:记录所有的日志 添加 --slowms ./mongod --dapath=/usr/local/mongodb/data/ --logpath=/usr/local/mongodb/log/logs.log --profile=1 --slowms=300 --fork 在启动后 > db.getProfilingLevel(); > db.setProfilingLevel(1) //设置开启慢查询 xx.xx.find({},{field1:1,field2:1,field3:1}).sort({field:-1}).limit(8);//查询出结果,返回字段,排序,限制条数 [性能监控] ./mongosniff --source ./mongostat [管理篇] 数据导入 mangoexport -d dabataseName -c collectionName -o /home/bakName.bak 数据导出 mangoimport -d databasesName -c collections /home/bakName.bak 备份 mongodump -d databaseName 恢复 mongorestore -d databaseName /备份路径文件 [用户授权] mongod --auth 添加验证选项 user admin //超级管理员 db.addUser('root','luowen');//超级管理员密码 每个数据库一个管理员,只能在这个数据库里面转 [架构篇] 主从复制 Master-Slave 复制(主从) Replica Sets 复制(副本集) 1.简单的主从 ./mongod --master --dbpath=/data1 ./mongod --slave --source 主服务器地址ip--dbpath=/data2 2.Replica Sets(副本集复制) ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key1 --dbpath=path/data1 ./mongod --replSet rs1 --keyFile=/usr/local/mongodb/key/key2 --dbpath=path/data2 //两个主服务器启动了,在同一个组中rs1中 //配置会议室(随便登入一台服务器) config_rs1={_id:'rs1',members:[{_id:0,host:"localhost:20001",priority:1},{_id:1,host:"localhost:20002",priority:2}]} //初始化清单 rs.initiate(config_rs1); rs.slaveOk();//设置从服务器有读的权限