MongoDB 高级用法

本文介绍MongoDB中的高级功能,包括聚合框架的使用方法及其操作符、group操作详解及索引的创建与管理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值