一.基础
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&quot;BasicDBObject使,orq.put(&quot;onlinestate&quot;,1);qList.add((newBasicDBObject(&quot;likes&quot;,newBasicDBObject(&quot;in&quot;作为BasicDB 参数使用,有点类似or q.put(&quot;onlinestate&quot;, 1); qList.add((new BasicDB (&quot;likes&quot;, new BasicDB (&quot;in\"BasicDBObject使,orq.put(\"onlinestate\",1);qList.add((newBasicDBObject(\"likes\",newBasicDBObject(\"gt\", 100))));
qList.add((new BasicDB (“likes”, new BasicDB (“lt&quot;,500))));q.put(&quot;lt&quot;, 500)))); q.put(&quot;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);
收藏 打印