最近公司的一个大表要从mysql中分离出来迁移到mongodb上,于是便有了下文:

一、多条件等值查询:

DBObject obj = new BadicDBObject();
obj.put("commentId",1);
obj.put("name",2);
DBCollection coll = db.getCollection("comment");
DBCursor cur = coll.find(obj);

二、多条件等值排序限制条数查询:

接上面

DBCollection coll = db.getCollection("comment");

DBCursor cur = coll.find(obj).sort(new BasicDBObject("commentId",-1)).limit(10);  //倒序,取最多十条

三、in查询

DBObject obj = new BasicDBObject();
BasicDBList list  = new BasicDBList();
list.add(1);list.add(2);
obj.put("commentId",new BasicDBObject("$in",list));

四、or查询

DBObject obj = new BasicDBObject();
BasicDBList list = new BasicDBList();
list.add("status",new BasicDBObject("$lt",2));
list.add("status",new BasicDBObject("$gt",4));
obj.put("$or",list);

五、mapReduce查询

map = function(){ emit(this.id,this.name);}   //emit相当于js中的eval,而this相当于collection的一行,emit会将数据组合为一个对象

reduce=function(key,value) {return {k:key,v:value};}  //这个reduce相当于js中的回调函数,里面传过来的值你可以按照js的写法加工后再返回

out是一个结果集,会缓存到你的库里

其它的操作跟查询的一样,eg:limit:3,sort:{commentId:-1} 等等.

六、findAndModify方法的使用

这个方法主要用来实现字段的自增功能,findAndModify(query,target,sort,isremove,update,returnValue,upsert)

query:查询条件

target:将要操作的字段

sort:排序

isremove:是否执行删除操作

update:sql中的set操作

returnValue:是否返回值

upsert:如果没有值,是否插入

对这个表的操作是线程安全的,mongodb会自动维护这个表的安全性。

DBCollection coll = getCollection(ID_INCREMENT);
long id = 1;
try {
DBObject sort = new BasicDBObject("currentId", -1);
DBObject update = new BasicDBObject("$inc",new BasicDBObject("currentId",1));
DBObject result = coll.findAndModify(new BasicDBObject("type", "comment"), new BasicDBObject("currentId",1), sort, false, update , true, true);
id =Long.parseLong(result.get("currentId") + "");
}catch(Exception e) {
e.printStackTrace();
}