mondodb常用shell命令和常用java驱动操作

MongoDB默认将数据存储在 /data/db 目录下

ubuntu默认安装在/usr/lib/mongodb下面

启动服务

启动MongoDB服务器:

$sudo  ./mongodb-路径/bin/mongod

启动shell,它默认连接到localhost:

$ sudo ./mongodb-路径/bin/mongo >命令语法

停止服务

#!/bin/bashpid=`ps -o pid,command ax | grep mongod | awk '!/awk/ && !/grep/ {print $1}'`;if [ "${pid}" != "" ]; then kill -2 ${pid};fi



shell:

show dbs  //所有的数据库

show collections  //当前数据库的所有集合
show users  //所有用户
user <db name>  //切换数据库
db.help()  //数据库所有可操作命令
db.testcollection.help()  //集合所有可操作命令
db.testcollection.find()  //当前数据库下的testcollection集合下的所有数据
db.testcollection.find({name:'larry'}) //查找
db.testcollection.insert({name:'larry'})  //插入

db.testcollection.remove({name:'larry'})  //删除

java api:

Mongo:连接对象
DB:数据库
DBCollection:集合(类比关系数据库中的表),可用于增删改查对象
BasicDBObject:实现了DBObject,一条记录。
DBCursor:游标,用来遍历查询取得的数据,实现了Iterable和Iterator

getLastError()

mongodb默认不等待响应消息。使用getLastError命令可以确保操作已经正确执行

写操作默认不会有返结果:这样就节约了客户端在写操作时等待客户端/服务器之间往返时间。

调用getLastError会阻塞连接一直到返回结果

java驱动使用WriteConcern配置返回结果的时机

返回值

这个命令的返回值是一个多字段的对象。常用的字段已经列在下面;这里可能还有其他字段。

  • ok - 为真的话表示getLastError命令成功完成了。它并不表示上一次没有错误。
  • err - 如果非空,表示有错误出现。值是一个错误正文的描述。
  • code - 如果设置了,表示出现的错误码。
  • connectionId - 连接的id。
  • lastOp - 上一次操作的op-id

对于更新:

  • n - 如果一次更新完成了,它是更新的文档个数。

使用了w

  • wnote - 如果设置了,表示这里有些不寻常的事情发生,涉及使用w:
  • wtimeout - 如果超时了,设置该值为真
  • waited - 如果超时了,标记等到了多久,单位毫秒
  • wtime - 花在等待操作完成的时间

连接数据库

Mongo m = new Mongo("localhost");//默认使用27017端口
DB db = m.getDB("qa");//获得名为qa的数据库,没有则创建
DBCollection question = db.getCollection("question");  //获得名为students的集合,没有则自动创建

m.getDatabaseNames();//查看所有数据库

db.getCollectionNames();//当前数据库下所有集合

m.dropDatabase("qa");//删除一个数据库


插入数据

BasicDBObject dbo = new BasicDBObject(); 

dbo.put("name""larry"); 

question.insert(dbo); 

question.save(dbo); 


insert如果主键_id存在不做任何操作
save如果主键_id存在更新

  查询数据

//查询所有对象
        DBCursor cur = question.find();
        while(cur.hasNext()){
            System.out.println(cur.next());
        }
        
        //第一个对象
        question.findOne();
        
        //查询记录数量
        question.find().count();
        
        //查询部分数据块
        cur = question.find().skip(0).limit(1);
        while(cur.hasNext()){
            System.out.println(cur.next());
        }

        //比较查询
        //"$gt": 大于
        //"$gte":大于等于
        //"$lt": 小于
        //"$lte":小于等于
        //"$in": 包含
        cond = new BasicDBObject();
        cond.put("age", new BasicDBObject("$gt",19));
        cond.put("age",new BasicDBObject("$gt",19).append("$lt", 30));
        cond.put("age",new BasicDBObject("$in",arr));
        Pattern p = Pattern.compile("Ja?k");
        cond.put("name", p);
        cur = question.find(cond);
        while(cur.hasNext()){
            System.out.println(cur.next());
        }
        



更新:

//如果数据不存在,是否添加

//匹配到多条是否修改

WriteConcern.NONE:没有异常抛出WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常

WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。

WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。

WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。

WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。

WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作


WriteResult ret = question.update(new BasicDBObject("name","larry"), new BasicDBObject("$set"new BasicDBObject("age",21,WriteConcern.NORMAL)),true,true,WriteConcern.SAFE);

ret.getN()      //操作影响的记录条数

ret.getLastError()//操作发生的异常

由于mongodb中使用连接池的原因,getLastError()需要再次从连接池中获取连接,这样效率会慢一些

WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}}, WriteConcern.SAFE);
if(ret.getLastError() == null)
    return true;
else
    return false;

<==>

db.requestStart();//保证使用同一个连接,连接中间不会被放回连接池
WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}});
if(ret.getLastError() == null)
    return true;
else
    return false;
db.requestDone();

删除:

question.remove(cond);


你可能感兴趣的:(mondodb常用shell命令和常用java驱动操作)