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 //当前数据库的所有集合db.testcollection.remove({name:'larry'}) //删除
java api:
Mongo:连接对象
DB:数据库
DBCollection:集合(类比关系数据库中的表),可用于增删改查对象
BasicDBObject:实现了DBObject,一条记录。
DBCursor:游标,用来遍历查询取得的数据,实现了Iterable和Iterator
getLastError()
mongodb默认不等待响应消息。使用getLastError命令可以确保操作已经正确执行
写操作默认不会有返结果:这样就节约了客户端在写操作时等待客户端/服务器之间往返时间。
调用getLastError会阻塞连接一直到返回结果
java驱动使用WriteConcern配置返回结果的时机
返回值
这个命令的返回值是一个多字段的对象。常用的字段已经列在下面;这里可能还有其他字段。
对于更新:
使用了w
连接数据库
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);