安装
创建mongodb用户
 [root@dg_135 ~]# groupadd -g 1005 mongodb 

 [root@dg_135 ~]# useradd -g mongodb -s /bin/bash -d /home/mongodb -m -u 1005 mongodb 

 [root@dg_135 ~]# chown -R mongodb.mongodb  /home/mongodb 


 安装mongodb 

 [root@dg_135 ~]# cd /home/mongodb/ 

 [root@dg_135 mongodb]# tar zxfv mongodb-linux-x86_64-2.4.4.tgz 

 [root@dg_135 mongodb]# mv mongodb-linux-x86_64-2.4.4 mongodb 

 [root@dg_135 ~]# mkdir -p /tol/mongodb/data 

 [root@dg_135 ~]# mkdir -p /tol/mongodb/log 

 [root@dg_135 mongodb]# chown -R mongodb.mongodb mongodb 

 [root@dg_135 ~]# chown -R mongodb.mongodb /tol/mongodb/data 

 [root@dg_135 ~]# chown -R mongodb.mongodb /tol/mongodb/log 

 [root@dg_135 mongodb]# su - mongodb 


 [mongodb@dg_135 ~]$ vim .bash_profile 

 export MONGODB=/home/mongodb/mongodb 

 export MONGO_DATA=/tol/mongodb/data  

 PATH=$PATH:$HOME/bin:$MONGODB/bin 

 export PATH 

 [mongodb@dg_135 ~]$ . .bash_profile 


启动 

 [mongodb@dg_135 ~]$ nohup mongod --dbpath=/tol/mongodb/data/ --logpath=/tol/mongodb/log/mongo.log  --logappend --port=27017 > /tol/mongodb/log/start_mongodb.log 2>&1 & 

 or 

 nohup mongod --auth --dbpath=/tol/mongodb/data/ --logpath=/tol/mongodb/log/mongo.log  --logappend --port=27017 > /tol/mongodb/log/start_mongodb.log 2>&1 & 


 查看进程: 

 [mongodb@dg_135 ~]$ ps aux | grep mongo 

 root     17491  0.0  0.0 101076  1356 pts/1    S    16:57   0:00 su - mongodb 

 mongodb  17492  0.0  0.0  66076  1580 pts/1    S    16:57   0:00 -bash 

 mongodb  19112 16.3  0.0 154340 38000 pts/1    Dl   17:15   0:01 mongod --dbpath=/tol/mongodb/data/ --logpath=/tol/mongodb/log/mongo.log --logappend --port=27017 

 mongodb  19116  2.0  0.0  65604   988 pts/1    R+   17:15   0:00 ps aux 

 mongodb  19117  0.0  0.0  61168   768 pts/1    S+   17:15   0:00 grep mongo 


 第一次连接: 

 [mongodb@dg_135 ~]$ mongo 

 MongoDB shell version: 2.4.4 

 connecting to: test 

 Thu Jun 20 17:15:54.108 JavaScript execution failed: Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:L112 

 exception: connect failed 


 如果报错,指定dbpath连接一下 

 [mongodb@dg_135 ~]$ mongod --dbpath /tol/mongodb/data/ 


 然后再重新连接 

 [mongodb@dg_135 ~]$ mongo 

 MongoDB shell version: 2.4.4 

 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 

 > show dbs; 

 local   0.078125GB 

>
设置密码
Mongodb默认是以无用户和密码的方式启动的,在生产环境中需要为生产数据库创建用户名和密码,mongodb的用户名和密码是针对具体的数据库设置的
 登陆到数据库,切换到要使用的数据库
 添加用户(注意命令大小写)
 > db.addUser ("koostorage","XXXXXX");
 {
         "user" : "db2",
         "readOnly" : false,
         "pwd" : "d7d06027ffb73b651acf1574cfc98e42",
         "_id" : ObjectId("51c3e35ae533478e93191ef2")
 }

 验证用户
 > db.auth("koostorage","XXXXXX");
 1

 查看系统已经存在的用户
 db.system.users.find();

 为数据库设置密码以后,如果想让客户端连接db时需要输入用户名和密码,那么数据在启动时需要以auth的方式启动
 客户端在连接时如果没有提供用户名和密码参数,可以连接上数据库,但是不能做任何操作

 删除用户
 > db.system.users.remove({user:"goolen"});常用操作
使用mongo命令连接,如果数据库设置了密码需要提供用户名和密码
 Mongo 直接连接test数据库
 mongo 的格式
 mongo [options] [db address] [file names (ending in .js)]
 例如:
 mongo   192.168.100.15:xxxx/admin -u admin -p admin
 mongo  --port 27017 -host 192.168.100.25 admin -u -p admin

 如果不提供端口默认连接到27017端口
 db address 不提供将会连接到test数据库

 查看帮助
 > help

 查看所有数据库
 > show dbs;
 local   0.078125GB

 查看当前正在使用的数据库
 > db
 test

 切换数据库 use dbname
 > db
 test
 > use goolen;
 switched to db goolen
 > db
 goolen

 查看当前数据库里有多少个collection
 > show collections;
 goolen
 mongodb
 system.indexes

 看collection中的内容 db.collectionsname.find()
 > db.goolen.find();
 { "_id" : ObjectId("51c552658ccac58145eeed44"), "id" : 1, "name" : "scott", "email" : "234@qq.com" }
 { "_id" : ObjectId("51c5527f8ccac58145eeed45"), "id" : 2, "name" : "lily", "email" : "678@qq.com" }

 插入数据 db.collectionsname.save();
 > db.goolen.save({1:"goolen"});
 > db.goolen.save({2:"scott"});

 更新数据 db.collectionsname.update();
 > db.goolen.update({'id':2},{$set:{'name':'lilei'}});

 删除数据 db.collectionsname.remove();
 > db.goolen.remove({'id':2});

 删除collections db.collectionsname.drop()
 > show collections;
 system.indexes
 t1
  
 > db.t1.drop();
 true
 > show collections;
 system.indexes

 创建数据库及collection 不需要显式创建,不需要显式创建是什么意思?就是没有专门创建用的命令,而一旦你使用了save()保存了一个数据,相对应的database及collection会自动建好。
 > show dbs
 local   0.078125GB
 test    0.203125GB

 > use db2
 switched to db db2
 > db.t1.save({1:"name"});
 > use admin
 > show dbs
 db2     0.203125GB
 local   0.078125GB
 test    0.203125GB

 从目标服务器克隆一个数据库
 db.cloneDataBase(fromhost) 

 复制数据库  fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址
 db.copyDatabase(fromdb,todb,fromhost) 

 创建一个数据集,相当于一个表 
 db.createCollection(name,{size:3333,capped:333,max:88888}) 

 db.currentOp() 取消当前库的当前操作 

 db.dropDataBase() 删除当前数据库 

 db.eval(func,args) run code server-side 

 db.getCollection(cname) 取得一个数据集合,同用法:db['cname'] 
 or 
 db.getCollenctionNames() 取得所有数据集合的名称列表 

 db.getLastError() 返回最后一个错误的提示消息 

 db.getLastErrorObj() 返回最后一个错误的对象 

 db.getPrevError() 返回上一个错误对象 
 db.getProfilingLevel()  db.getMongo() 取得当前服务器的连接对象get the server 
 db.getMondo().setSlaveOk() allow this connection to read from then nonmaster membr of a replica pair 

 db.getName() 返回当操作数据库的名称 

 db.getReplicationInfo() 获得重复的数据 
 db.getSisterDB(name) get the db at the same server as this onew 

 db.killOp() 停止(杀死)在当前库的当前操作 

 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.setProfilingLevel(level) 0=off,1=slow,2=all 

 db.shutdownServer() 关闭当前服务程序 

 db.version() 返回当前程序的版本信息

 db.test.find({id:10}) 返回test数据集ID=10的数据集

 db.test.find({id:10}).count() 返回test数据集ID=10的数据总数 

 db.test.find({id:10}).limit(2) 返回test数据集ID=10的数据集从第二条开始的数据集 

 db.test.find({id:10}).skip(8) 返回test数据集ID=10的数据集从0到第八条的数据集 

 db.test.find({id:10}).limit(2).skip(8) 返回test数据集ID=1=的数据集从第二条到第八条的数据 

 db.test.find({id:10}).sort() 返回test数据集ID=10的排序数据集 

 db.test.findOne([query]) 返回符合条件的一条数据 

 db.test.getDB() 返回此数据集所属的数据库名称 

 db.test.getIndexes() 返回些数据集的索引信息 

 db.test.group({key:...,initial:...,reduce:...[,cond:...]}) 

 db.test.mapReduce(mayFunction,reduceFunction,<optional params>) 

 db.test.remove(query) 在数据集中删除一条数据 

 db.test.renameCollection(newName) 重命名数据集名称 

 db.test.save(obj) 往数据集中插入一条数据 

 db.test.stats() 返回此数据集的状态 

 db.test.storageSize() 返回此数据集的存储大小 

 db.test.totalIndexSize() 返回此数据集的索引文件大小

 db.test.totalSize() 返回数据集的总大小 

 db.test.update(query,object[,upsert_bool]) 在此数据集中更新一条数据 

 db.test.validate() 验证此数据集 

 db.test.getShardVersion() 返回数据集共享版本号 

 db.link.find().size();
 117440

 复制远程库的collection
 db.runCommand({cloneCollection:"koolearn.link",from:"172.18.32.138:27017"})

 复制本地库collection
 db.src_collection.find().forEach(function(x){db.target_collection.insert(x)}) 

 单实例启动是mongodb最简单的启动方式,此中启动方式一般作为测试数据库时启动,mongodb有许多启动参数具体的可以通过命令 

 Mongod –help查看 

 Su – mongodb 

 以下启动不需要client提供用户名和密码连接 

mongod --fork  --port 27017  --dbpath  /home/mongodb--single--data  --logpath /home/mongodb--single--data/mongodb.log   --logappend 
 需要client提供用户名和密码连接 

 mongod --fork --auth --port 27017  --dbpath  /home/mongodb--single--data  --logpath /home/mongodb--single--data/mongodb.log  --logappend  

 启动成功后会看到如下信息 

 forked process: 3461 

 all output going to: /home/mongodb--single--data/mongodb.log 


 nohup启动: 

[mongodb@dg_135 ~]$ nohup mongod --dbpath=/tol/mongodb/data/ --logpath=/tol/mongodb/log/mongo.log  --logappend --port=27017 > /tol/mongodb/log/start_mongodb.log 2>&1 &
关闭:
登陆mongodb
 User admin
 db.shutdownServer()
 注意不要强行杀进程,强行杀进程有可能导致mongodb.lock文件锁不释放,在此启动时会无法启动
MongoDB语法 MySql语法 
 db.test.find({'name':'foobar'}) <==> select * from test where name='foobar' 
 db.test.find() <==> select * from test 
 db.test.find({'ID':10}).count() <==> select count(*) from test where ID=10 
 db.test.find().skip(10).limit(20) <==> select * from test limit 10,20 
 db.test.find({'ID':{$in:[25,35,45]}}) <==> select * from test where ID in (25,35,45) 
 db.test.find().sort({'ID':-1}) <==> select * from test order by ID desc 
 db.test.distinct('name',{'ID':{$lt:20}}) <==> select distinct(name) from test where ID<20 
 db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}}) <==> select name,sum(marks) from test group by name 
 db.test.find('this.ID<20',{name:1}) <==> select name from test where ID<20 
 db.test.insert({'name':'foobar','age':25})<==>insert into test ('name','age') values('foobar',25) 
 db.test.remove({}) <==> delete * from test 
 db.test.remove({'age':20}) <==> delete test where age=20 
 db.test.remove({'age':{$lt:20}}) <==> delete test where age<20 
 db.test.remove({'age':{$lte:20}}) <==> delete test where age<=20 
 db.test.remove({'age':{$gt:20}}) <==> delete test where age>20 
 db.test.remove({'age':{$gte:20}}) <==> delete test where age>=20 
 db.test.remove({'age':{$ne:20}}) <==> delete test where age!=20 
 db.test.update({'name':'foobar'},{$set:{'age':36}}) <==> update test set age=36 where name='foobar' 
 db.test.update({'name':'foobar'},{$inc:{'age':3}}) <==> update test set age=age+3 where 
 name='foobar'备份恢复:
mongodump/mongorestore
 >mongodump -h dbhost -d dbname -o dbdirectory
 -h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
 -d:需要备份的数据库实例,例如:test
 -o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。


 >mongorestore -h dbhost -d dbname --directoryperdb dbdirectory
 -h:MongoDB所在服务器地址
 -d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
 --directoryperdb:备份数据所在位置,例如:c:\data\dump\test,这里为什么要多加一个test,而不是备份时候的dump,读者自己查看提示吧!
 --drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!


 其他:
 mongoimport / mongoexport
 mongoexport -d koolearn -c link -o link.dat
 参数说明:
 -d:指明使用的库
 -c:指明要导出的集合
 -o:指明要导出的文件名
 从上面的结果可以看出,我们在导出数据时没有显示指定导出样式 ,默认导出了JSON格式的数据。如果我们需要导出CSV格式的数据,则需要使用--csv参数,具体如下所示:
 mongoexport -d koolearn -c link --csv -f classid,name,age -o link_csv.dat

 参数说明:
 -csv:指明要导出为csv格式
 -f:指明需要导出classid、name、age这3列的数据

 mongoimport -d koostorage -c link link.dat
 参数说明:
 -h:指明数据库宿主机的IP
 -u:指明数据库的用户名
 -p:指明数据库的密码
 -d:指明数据库的名字
 -c:指明collection的名字
 -f:指明要导入那些列
 -type:指明要导入的文件格式
 -headerline:指明第一行是列名,不需要导入
 -file:指明要导入的文件