最近公司的一个大表要从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();
}