1.MongoDB背景知识。
Mongo DB 是目前在IT行业非常流行的一种非关系型数据库(NoSql),其灵活的数据存储方式备受当前IT从业人员的青睐。Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个Document对象。Mongo DB最大的优势在于所有的数据持久操作都无需开发人员手动编写SQL语句,直接调用方法就可以轻松的实现CRUD操作。(摘自百度百科)
详细介绍可以查看官网:http://docs.mongodb.org/manual/core/introduction/
2.mongo DB的常用基本操作
1)连接代码实例:
public void initMongo() {
MongoClientURI uri = new MongoClientURI("mongodb://localhost:27017/");
try {
client = new MongoClient(uri);
} catch (UnknownHostException e) {
e.printStackTrace();
}
// 如果该数据库不存在,则创建一个名为“dbForErrorLog”的db
db = client.getDB("dbForErrorLog”);
// 如果该collection不存在,则创建一个名为“wallpaper”的collection
collection = db.getCollection("wallpaper”);
}
连接之后可以通过collection来进行查询,插入,删除,更新。
2)查询接口:
// param1:要查询的key
// param2:要查询的key对应的值
// 接口功能:根据给定条件,查询符合条件的document记录
public void query(String key, Object value) {
BasicDBObject queryPattern = new BasicDBObject();
queryPattern.put(key, value);
DBCursor cur = collection.find((DBObject)queryPattern);
while (cur.hasNext()) {
System.out.println(cur.next());
}
}
// 无参数
// 接口功能:直接显示当前collection的所有条目
// 类似于 select * from table
public void queryAll() {
DBCursor cur = collection.find();
while (cur.hasNext()) {
System.out.println(cur.next());
}
}
3)插入接口:
// param:要插入collection的key/value对,存在Map中
// 接口功能:向当前collection插入一个条目(document)
public void writeIntoMongo(Map content) throws UnknownHostException {
DBObject ob = new BasicDBObject(content);
collection.insert(ob);
}
// 如果想要一次性添加多个条目,可以传入一个(List<DBObject> list)参数,把要插入的record存储在DBObject中,通过List一次性插入。
// collection.insert(list);
4)删除接口:
// param:要删除的条目满足的查询条件
// 接口功能:从当前collection中删除满足条件的条目
// e.g. DBObject rm = new BasicDBObject("errorId", new BasicDBObject("$gte",1001));
// 调用效果:把所有”errorId”的值大于等于1001的document删除
// 也可以像添加操作一样,传入一个Map,使用Map构建DBObject,从而用多个条件限定结果。
public void removeFromMongo(DBObject rmPattern){
collection.remove(rmPattern);
}
5)更新接口:
// param1:要替换掉的条目所满足的查询条件
// param2:更新之后的条目内容
// param3:若为true,则没找到符合条件的record时,插入dest
// param4:若为false,则只更新符合条件的第一行;
// 若为true,则更新找到的所有record,此时dest应使用$set
// 接口功能:在collection中更新某些条目
// e.g. param1与删除的param相似
// param2是要插入的DBObject,可以使用Map初始化,也可以直接用key/value对来初始化
// e.g. DBObject dest = new BasicDBObject("errorId",1003);
public void updateMongo(DBObject src, DBObject dest,boolean upsert, boolean multi) {
collection.update(src, dest, upsert, multi);
}
6)main函数调用示例:
public static void main(String[] args) {
UtilForMongoDB wim = new UtilForMongoDB();
wim.initMongo();
// 把要插入的key/value对全部存在map中
Map<String, Object> map = new HashMap<String, Object>();
map.put("errorType","wallpaper");
map.put("errorId", 1001);
try {
wim.writeIntoMongo(map);
} catch (UnknownHostException e) {
e.printStackTrace();
}
// 删除所有”errorId”==1001的record
DBObject rm = new BasicDBObject("errorId", 1001);
wim.removeFromMongo(rm);
// 把找到的第一个”errorId”>=1000的record,更新为{”errorId”:1003}
// 相当于把src标识出的第一个record的内容</span>完全替换为dest表示的record。
// 替换前后的record,保持primaryKey(_id)的值不变。
DBObject src = new BasicDBObject("errorId", new BasicDBObject("$gte",1000));
DBObject dest = new BasicDBObject(“errorId”, “sorry I am updated”);
wim.updateMongo(src, dest, true, false);
// 执行结果如下:
/* after insert:
{ "_id" : { "$oid" : "55d5704ee4b0d63f949c5327"} , "errorType" : "wallpaper" , "errorId" : 1001}
after update:
{ "_id" : { "$oid" : "55d5704ee4b0d63f949c5327"} , "errorId" : "sorry I am updated"}
*/
// multi参数为true,则更新所有匹配src的record</span>
// dest 通过$set参数,只改变dest中的key/value,不改变其他内容
DBObject src = new BasicDBObject("errorId", new BasicDBObject("$gte",1000));
DBObject dest = new BasicDBObject("$set",new BasicDBObject("errorId","sorry I am updated"));
wim.updateMongo(src, dest, true, true);
// 执行结果如下:
/*after insert:
{ "_id" : { "$oid" : "55d5710ae4b0dea0b484bf59"} , "errorType" : "wallpaper" , "errorId" : 1001}
after update:
{ "_id" : { "$oid" : "55d5710ae4b0dea0b484bf59"} , "errorId" : "sorry I am updated" , "errorType" : "wallpaper"}
*/
}