出处:http://www.cnblogs.com/stephen-liu74/archive/2012/09/19/2652308.html
MongoDB除了基本的查询功能之外,还提供了强大的聚合功能。这里主要介绍count、distinct和group。
1. count:
--在空集合中,count返回的数量为0。
> db.test.count()
0
--测试插入一个文档后count的返回值。
> db.test.insert({"test":1})
> db.test.count()
1
> db.test.insert({"test":2})
> db.test.count()
2
--count和find一样,也接受条件。从结果可以看出,只有符合条件的文档参与了计算。
> db.test.count({"test":1})
1
2. distinct:
distinct用来找出给定键的所有不同的值。使用时也必须指定集合和键。
--为了便于后面的测试,先清空测试集合。
> db.test.remove()
> db.test.count()
0
--插入4条测试数据。请留意Age字段。
> db.test.insert({"name":"Ada", "age":20})
> db.test.insert({"name":"Fred", "age":35})
> db.test.insert({"name":"Andy", "age":35})
> db.test.insert({"name":"Susan", "age":60})
--distinct命令必须指定集合名称,如test,以及需要区分的字段,如:age。
--下面的命令将基于test集合中的age字段执行distinct命令。
> db.runCommand({"distinct":"test", "key":"age"})
{
"values" : [
20,
35,
60
],
"stats" : {
"n" : 4,
"nscanned" : 4,
"nscannedObjects" : 4,
"timems" : 0,
"cursor" : "BasicCursor"
},
"ok" : 1
}
3. group:
group做的聚合有些复杂。先选定分组所依据的键,此后MongoDB就会将集合依据选定键值的不同分成若干组。然后可以通过聚合每一组内的文档,产生一个结果文档。
--这里是准备的测试数据
> db.test.remove()
> db.test.insert({"day" : "2012-08-20", "time" : "2012-08-20 03:20:40", "price" : 4.23})
> db.test.insert({"day" : "2012-08-21", "time" : "2012-08-21 11:28:00", "price" : 4.27})
> db.test.insert({"day" : "2012-08-20", "time" : "2012-08-20 05:00:00", "price" : 4.10})
> db.test.insert({"day" : "2012-08-22", "time" : "2012-08-22 05:26:00", "price" : 4.30})
> db.test.insert({"day" : "2012-08-21", "time" : "2012-08-21 08:34:00", "price" : 4.01})
--这里将用day作为group的分组键,然后取出time键值为最新时间戳的文档,同时也取出该文档的price键值。
> db.test.group( {
... "key" : {"day":true}, --如果是多个字段,可以为{"f1":true,"f2":true}
... "initial" : {"time" : "0"}, --initial表示$reduce函数参数prev的初始值。每个组都有一份该初始值。
... "$reduce" : function(doc,prev) { --reduce函数接受两个参数,doc表示正在迭代的当前文档,prev表示累加器文档。
... if (doc.time > prev.time) {
... prev.day = doc.day
... prev.price = doc.price;
... prev.time = doc.time;
... }
... } } )
[
{
"day" : "2012-08-20",
"time" : "2012-08-20 05:00:00",
"price" : 4.1
},
{
"day" : "2012-08-21",
"time" : "2012-08-21 11:28:00",
"price" : 4.27
},
{
"day" : "2012-08-22",
"time" : "2012-08-22 05:26:00",
"price" : 4.3
}
]
--下面的例子是统计每个分组内文档的数量。
> db.test.group( {
... key: { day: true},
... initial: {count: 0},
... reduce: function(obj,prev){ prev.count++;},
... } )
[
{
"day" : "2012-08-20",
"count" : 2
},
{
"day" : "2012-08-21",
"count" : 2
},
{
"day" : "2012-08-22",
"count" : 1
}
]
--最后一个是通过完成器修改reduce结果的例子。
> db.test.group( {
... key: { day: true},
... initial: {count: 0},
... reduce: function(obj,prev){ prev.count++;},
... finalize: function(out){ out.scaledCount = out.count * 10 } --在结果文档中新增一个键。
... } )
[
{
"day" : "2012-08-20",
"count" : 2,
"scaledCount" : 20
},
{
"day" : "2012-08-21",
"count" : 2,
"scaledCount" : 20
},
{
"day" : "2012-08-22",
"count" : 1,
"scaledCount" : 10
}
]
相关推荐
一、MongoDB基础知识 MongoDB以JSON(JavaScript Object Notation)格式存储数据,这种格式灵活且易于理解和处理。数据以文档的形式存储,每个文档都是一组键值对,类似于JavaScript的对象。MongoDB支持丰富的查询...
2. **聚合框架优化**:MongoDB的聚合框架得到了显著增强,性能提升显著,使得数据处理更加高效,特别是对于数据分析和报告生成。 3. **变更流**:这是一个实时数据更改的API,允许应用程序订阅并接收数据库中的实时...
MongoDB 3.4系列是一个稳定且功能丰富的版本,它引入了许多新特性,例如聚合框架的改进、新的存储引擎——WiredTiger,以及对TLS/SSL加密的支持,增强了数据安全性和性能。 描述中提到"centos6.2 + 不是centos7.0...
总结来说,MongoDB 4.2.5针对RHEL 6.2提供了强大的数据存储、处理和管理能力,其事务支持、聚合框架优化、安全增强、实时变更监听以及丰富的运维工具,使其成为现代应用程序的理想选择。通过深入理解和熟练运用这些...
你现在已经具备了运行、管理MongoDB数据库的基础知识,可以进一步探索复制集、分片、索引、聚合等功能,以满足更复杂的应用场景。同时,作为运维人员,了解数据库性能监控、备份恢复以及安全性策略也是必不可少的...
MongoDB在RHEL上运行可以受益于其成熟的系统管理和安全特性,为生产环境提供稳定的运行基础。 - RHEL 7.2是该系列的一个版本,它支持更新的技术如KVM虚拟化和OpenSSL 1.0.2,同时也包括对Docker等容器技术的支持,...
9. **云服务**:MongoDB还提供了MongoDB Atlas,一个完全托管的云数据库服务,用户无需关心基础设施维护。 在使用MongoDB时,开发者需要了解如何配置数据库、创建集合、插入和查询文档,以及如何进行备份和恢复操作...
- **聚合框架改进**:聚合管道的性能得到提升,同时增加了新的聚合操作符,如`$merge`和`$out`,使得数据分析更为强大。 - **安全增强**:支持了角色基础的访问控制(RBAC),提供了更细粒度的权限管理,以及增强的...
5. **读写分离与分片**:MongoDB的分片功能允许在多台机器上分散数据,提高读写性能,3.6版本在此基础上进一步优化了分片策略。 6. **新的备份工具**:推出了Mongodump和Mongorestore的新版本,提供了更快、更可靠...
MongoDB 是一个流行的开源、分布式文档数据库系统,它以其灵活性、高性能和易用性而备受赞誉。...在 macOS 上使用带有 SSL 支持的 MongoDB,可以确保本地开发环境的安全性,为开发高安全性的应用打下坚实基础。
2. **查询性能**:MongoDB支持丰富的查询语法,包括聚合框架、地理空间索引、正则表达式匹配等。3.4.6版本进一步提升了查询性能,特别是在大规模数据集上的复杂查询,通过查询优化器进行更智能的计划选择。 3. **...
2. **聚合框架增强**:MongoDB的聚合框架允许对数据进行高效分析,4.4版本增强了窗口函数,如`lead()`和`lag()`,可以用于计算相邻文档之间的差异或趋势。 3. **存储引擎优化**:WiredTiger存储引擎在4.4版本中进行...
在实际开发中,可以使用MongoDB Java驱动构建复杂的查询、聚合操作和数据处理逻辑,配合Spring Data MongoDB等高级框架,可以进一步简化开发工作,提高效率。对于分布式应用,驱动还支持分片、复制集等高级特性,...
9. **安全性**:MongoDB 3.6引入了X509认证、角色基础的访问控制(RBAC)和加密功能,增强了数据的安全性和合规性。 10. **性能优化**:MongoDB支持索引、聚合框架和查询优化器,能有效提高查询速度。此外,其内置...
首先,`mongo-c-driver-1.17.3.tar.gz`是一个C语言的MongoDB驱动程序,它是C++驱动的基础,提供了基础的网络通信和认证功能。解压后,`mongo-c-driver-1.17.3`目录包含源码和编译所需文件,开发者可以使用CMake来...
了解这些基础后,你可以进一步探索更多高级特性,如索引、副本集、分片等,以便在实际项目中更高效地利用MongoDB。记住,实践是学习的最佳途径,动手尝试这些示例,结合MongoDB_Demo中的代码,你会更快掌握MongoDB与...
1. MongoDBTemplate:是 Spring Data MongoDB 提供的基础访问层,用于执行各种数据库操作,如插入、查询、更新和删除。 2. Repository 接口:通过继承 MongoRepository 接口,可以定义基本的 CRUD 方法,甚至自定义...
- **聚合操作**:MongoDB的聚合框架允许对数据进行分析和处理,如计算平均值、分组统计等。 ```java AggregateIterable<Document> aggregate = collection.aggregate(Arrays.asList( unwind("$items"), group("$...
这个资料包包含了“mongodb_base.pdf”和“mongodb_advance.pdf”两个文件,分别涵盖了MongoDB的基础知识和高级知识。 首先,让我们从基础开始。MongoDB的基础知识主要包括以下几个方面: 1. 数据模型:MongoDB...
在MongoDB中,数据通常是以BSON形式存储的,因此这个库是Java驱动程序与MongoDB交互的基础。它提供了解析和生成BSON文档的工具,包括`BsonDocument`和`BsonValue`等类,方便了数据的转换和处理。 在3.7.0版本中,...