一.基础
1.添加
Givegift givegift=new Givegift();
givegift.setUserId(userId);
givegift.setToUserId(toUserId);
givegift.setTime(DateUtil.currentTimeSeconds());
dsForRW.save(givegift);
2.根据id删除一条数据 id一定要是 类型
Query q=dsForRW.createQuery(Gift.class);
q.filter(“giftId”, new Id(giftId));
dsForRW.delete(q);
3.修改记录 传入的giftId一定要修改为 类型的
Query q = dsForRW.createQuery(Gift.class).field(\"_id\").equal(new Id(giftId));
UpdateOperations ops = dsForRW.createUpdateOperations(Gift.class);
ops.set(“name”, name);
ops.set(“photo”, photo);
ops.inc(“price”,1000);//在原来价格的基础上增加1000元 ops.inc(“price”);默认是增加1
ops.inc(“price”,-1000);//在原来价格的基础上减少1000元 ops.dec(“price”,1000) 一样的效果
ops.set(“type”, type);
Gift gift = dsForRW.findAndModify(q, ops);//这个是返回修改完成的 dsForRW.update(query, ops); 这个是没有返回值的
4.根据id查询一条数据
Query<表名> q=dsForRW.createQuery(表名.class);
q.filter(“userId”,userId);
User user=new User();
user=q.get();
5.查询记录个数
public int getHotelCnt() {
Query<表名> query = ds.createQuery(表名.class);
return (int) query.countAll();
}
DB q = new BasicDB ();
q.put(“onlinestate”, 1);
long count = dsForRW.getCollection(表名.class).getCount(q);
.find(q).count() 也行
6.查询列表
Query<表名> query = ds.createQuery(表名.class);
query.field(“hotelName”).equal(“XXX”); // 此处是精确查询
query.field(“hotelName”).contains(“XXX”); // 此处是模糊查询
query.field(“price”).greaterThan(100); // 查询价格大于100的
query.field(“price”).lessThan(500); // 查询价格小于500的
//and
query.and(query.criteria(“hotelName”).contains(“XXX”),
query.criteria(“hotelAddress”).contains(“XXX”));
//or
query.or(query.criteria(“hotelName”).contains(“XXX”),
query.criteria(“hotelName”).contains(“XXX”));
// 按价格正序排列 或者 按时间倒序排序(前面加一个’-’)
query.order(“price”);
query.order(\"-creatTime\");
// 分页相关,如果没有offset和limit,则一次性取出所有结果
query.offset(0); // 先得到查询结果集,然后从第0个开始取数据
query.limit(10); // 先得到查询结果集,一次最多从结果集中获取10个结果
return query.asList();
@Resource(name = “dsForRW”) private Datastore dsForRW;
7.多个条件or的实现方法
// 条件q查询用户表中用户在线量
DB q = new BasicDB ();
BasicDBList qList = new BasicDBList(); //BasicDBList和\"in\"作为BasicDBObject参数使用,有点类似orq.put(\"onlinestate\",1);qList.add((newBasicDBObject(\"likes\",newBasicDBObject(\"gt\", 100))));
qList.add((new BasicDB (“likes”, new BasicDB (“lt\",500))));q.put(\"or”, qList); //多个条件or的实现方法,
long count = dsForRW.getCollection(User.class).getCount(q);
8.指定返回字段 通过findone
DB q = new BasicDB ();
q.put(“from”,from);
q.put(“isReceived”,0);
q.put(“to”,to);
DB q2 = new BasicDB ();
q2.put(\"_id\",true);
q2.put(\"from\",true);
q2.put(\"fromName\",true);
q2.put(\"to\",true);
q2.put(\"ts\",true);
q2.put(\"contentType\",true);
q2.put(\"content\",true);
q2.put(\"isRonceal\",true);
return dsForNetty.getDB().getCollection(\"messageHistory\").findOne(q,q2,new BasicDB (\"ts\", -1));
二. 不通过实体类的aduc
1.post请求 转换为map集合添加
Map<String, String[]> parameterMap = request.getParameterMap();
BasicDB dbObj=new BasicDB ();
for (Entry<String,String[]> entry : parameterMap.entrySet()) {
dbObj.put(entry.getKey(), entry.getValue()[0]);
}
userManager.getDatastore().getDB().getCollection(“message”).insert(new BasicDB (dbObj));
2.删除 id为 类型
BasicDB query=new BasicDB (\"_id\", new Id(id));
userManager.getDatastore().getDB().getCollection(“message”).remove(query);
3.修改
Map<String, String[]> parameterMap = request.getParameterMap();
BasicDB dbObj=new BasicDB ();
for (Entry<String,String[]> entry : parameterMap.entrySet()) {
dbObj.put(entry.getKey(), entry.getValue()[0]);
}
BasicDB query=new BasicDB (\"_id\", parse(dbObj.getString(\"_id\")));
dbObj.remove(\"_id\");
userManager.getDatastore().getDB().getCollection(“message”).update(query, new BasicDB (MongoOperator.SET, dbObj),true,false);
4.查询 和 按照条件查询
DBCollection db=dsForRW.getDB().getCollection(“message”);
BasicDB query=null;
if(!StringUtil.isEmpty(keyword)){
query=new BasicDB ();
BasicDBList values = new BasicDBList();
values.add(new BasicDB (\"type\", new BasicDB (MongoOperator.REGEX, keyword)));
values.add(new BasicDB (\"code\", new BasicDB (MongoOperator.REGEX, keyword)));
query.put(\"$or\", values);
}
List<DB > list =null;
long total=0;
if(null==query){
list= db.find().skip(pageIndex*pageSize).limit(pageSize).sort(new BasicDB (\"_id\",-1)).toArray();
total=db.count();
}else{
list=db.find(query).skip(pageIndex*pageSize).limit(pageSize).sort(new BasicDB (\"_id\",-1)).toArray();
total=db.count(query);
}
mav.add (\"page\", new PageVO(list, total, pageIndex, pageSize));
$gt:>
$gte:>=
$eq: =
$ne: !=
$lt: <
$lte: <=
$in: in(后面的值为bson对象数组)
$nin: not in(后面的值为bson对象数组)
三.高级:
1.分组(过滤字段)
Query query = dsForNetty.createQuery(MessageHistory.class).filter(“to”,to)
.filter(“isReceived”,0);
AggregationPipeline messagerFromId = dsForNetty.createAggregation(MessageHistory.class)
.match(query).group(id(grouping(“from”)),grouping(“from”, first(“from”)));
return Lists.newArrayList(messagerFromId.aggregate(MessagerFromId.class));
2.MongoDB批量修改
1.dsForNetty.getCollection(MessageHistory.class).update(jo, isRead, true, true);
2.DB command = new BasicDB ();
command.put(“update”, “messageHistory”);
List updateList = new ArrayList();
for (String i : id) {
BasicDB jo = new BasicDB ();
jo.put(\"_id\",new Id(i));
BasicDB isReads = new BasicDB ();
isReads.put(\"isRead\", isRead);
BasicDB jo2 = new BasicDB ();
jo2.put(\"$set\", isReads);
BasicDB update = new BasicDB ();
update.put(\"q\", jo);
update.put(\"u\", jo2);
update.put(\"upsert\", true);
update.put(\"multi\", true);
updateList.add(update);
}
command.put(\"updates\", updateList);
command.put(\"ordered\", true);
CommandResult commandResult = dsForNetty.getDB().command(command);
//两种批量修改用法,经多次测试方法1在执行效率上高于方法2。使用的时候两种有差异,但是皆可使用
//使用MongoDB自带批量修改工具类
//条件
/*BasicDB queryDB = new BasicDB ();
queryDB .put(\"name\", \"XXX\");
//修改的内容
BasicDB updateDB = new BasicDB ();
updateDB .put(\"name\", \"XXX\");
//执行的操作
BasicDB setDB = new BasicDB ();
setDB .put(\"$set\", updateDB );
//执行批量修改
dsForRW.getCollection(User.class).update(queryDB , setDB , true, true);*/
long endTime = System.currentTimeMillis();
System.err.println(endTime-startTime);
继续阅读与本文标签相同的文章
“量子霸权”不需过度炒作:走向商用或至少需10年
-
BAT技术面dubbo还能这么问?
2026-05-18栏目: 教程
-
yaml转json,json转yaml,使用js-yaml实现yaml和json转换
2026-05-18栏目: 教程
-
PostgreSQL系统隐藏字段
2026-05-18栏目: 教程
-
7月24日阿里云峰会.上海 开发者大会回看
2026-05-18栏目: 教程
-
aPaaS平台是什么?aPaaS与PaaS有什么区别?
2026-05-18栏目: 教程
