您的位置:首页 > 数据库 > Mongodb

MongoDB 高级用法

2015-09-22 09:54 501 查看
MongoDB高级用法

1.聚合 aggregate

适用场景:统计数据

方法:db.collection.aggrate([array]);

操作符:

$project:包含、排除、重命名以及显示字段

$match:查询

$limit:限制结果数量

$skip:跳过结果数量

$sort:排序

$group:分组

$unwind:分割嵌入数组到自己的顶层文件

实例:

java封装类:

protected AggregationOutput aggregate(DB db,String name,DBObject firstOp, DBObject ... additionalOps) throws Exception
{
return db.getCollection(name).aggregate(firstOp, additionalOps);
}

示例数据:


1 {_id:1,name:"a",status:1,num:1}

2 {_id:2,name:"a",status:0,num:2}

3 {_id:3,name:"b",status:1,num:3}

4 {_id:4,name:"c",status:1,num:4}

5 {_id:5,name:"d",status:1,num:5}

示例一:$project 获取部分数据,类似select arg1,arg2 from table

DBobject projectQuery=new BasicDBObject("$project",new BasicDBObject("_id",1)
.append("name",1));
List<DBObject> dboList = (List<DBObject>)aggregate(db, user,projectQuery);


实例二:$match 匹配查询条件

DBobject matchQuery=new BasicDBObject("$match",new BasicDBObject("name","a"));
List<DBObject> dboList = (List<DBObject>)aggregate(db, user,matchQuery);
实例三:$group 分组

DBobject groupQuery=new BasicDBObject("$group",new BasicDBObject("_id","$name").append("count",new BasicDBObject("$sum",1)).append("total",new BasicDBObject("$sum","$num")));
List<DBObject> dboList = (List<DBObject>)aggregate(db, user,matchQuery);


二、group

方法:

public DBObject group(DBObject key,
DBObject cond,
DBObject initial,
String reduce,
String finalize)
throws MongoException


参数:

key - - { a : true }
cond - - optional condition on query
reduce - javascript reduce function
initial - initial value for first match on a key
finalize - An optional function that can operate on the result(s) of the reduce function.


示例:

final List<String> targetTerms = Arrays.asList("dogs", "cats");
final Datastore ds = ….
final DBCollection coll = ds.getCollection(Example.class);
BasicDBObject key = new BasicDBObject("_id", true);
BasicDBObject cond = new BasicDBObject();
cond.append("indices", new BasicDBObject("$in", targetTerms));
BasicDBObject initial = new BasicDBObject();
initial.append("score", 0);
initial.append("targetTerms", targetTerms);
String reduce = "function (obj, prev) { " +
"  for (i in prev.targetTerms) {" +
"    targetTerm = prev.targetTerms[i];"+
"      for (j in obj.indices) {" +
"        var index = obj.indices[j];"+
"        if (targetTerm === index) prev.score++;" +
"    }" +
"  }" +
"}";
String fn = null;
final BasicDBList group = (BasicDBList) coll.group(key, cond, initial, reduce, fn);


3.索引

好处:加速查询

创建索引:db.test.ensureIndex({"username":1})

查看是否建立索引:db.test.getIndexes()

删除索引:db.test.dropIndex({"username":1})

查看查询全部信息:db.test.find().explain()

4.其他查询

$where
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: