添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

1. 创建集合

db.




    
material.insert([
    { "_id" : "M00001", "name" : "多乐士油漆", "price" : 80},
    { "_id" : "M00002", "name" : "马可波罗瓷砖", "price" : 20 },
    { "_id" : "M00003", "name": "海螺水泥", "price": 150  },
    { "_id" : "M00004", "name" : "大金空调", "price" : 500},
    { "_id" : "M00005", "name" : "公牛插座", "price" : 25},
    { "_id" : "M00006", "name" : "慕思寝具", "price" : 50},
    { "_id" : "M00007", "name" : "踏踏木门", "price" : 100}
db.merchant.insert([
   { "_id" : "T00001", "name" : "张三建材", "materialCode" : ["M00001", "M00002", "M00003"]},
   { "_id" : "T00002", "name" : "李四建材", "materialCode" : ["M00004", "M00002", "M00005"]},
   { "_id" : "T00003", "name" : "王五建材", "materialCode" : ["M00006", "M00002", "M00007"]}

2. 聚合分组、求和、平均值查询

2.1 MongoTemplate查询

package com.hollysys.tn.controller;
import io.swagger.annotations.Api;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/test")
@Api(tags = "测试")
public class TestController {
	@Autowired
	private MongoTemplate mongo;
	@Data
	@Document("material")
	class Material{
		private String _id;
		private String name;
		private Integer price;
	@Data
	@Document("merchant")
	class Merchant{
		private String _id;
		private String name;
		private List<String> materialCode;
	@GetMapping("/test")
	public List<Map> test() {
		Aggregation aggregation = Aggregation.newAggregation(
				Aggregation.unwind("materialCode"),
				Aggregation.lookup("material", "materialCode", "_id", "merchant_as"),
				Aggregation.unwind("merchant_as"),
				Aggregation.project("_id","name","materialCode")
					.and("merchant_as.name").as("materialName")
					.and("merchant_as.price").as("price"),
				Aggregation.group("materialCode", "materialName")
					.count().as("count")
					.sum("price").as("sum")
					.avg("price").as("avg"),
				Aggregation.match(Criteria
						.where("count").gte(3))
		List<Map> result =  mongo.aggregate(aggregation,"merchant",Map.class).getMappedResults();
		System.out.println(result);
		return result;

2.2 Mongo中的查询

db.merchant.aggregate([
     { "$unwind" : "$materialCode" },
        "$lookup" : { 
            "from" : "material",
            "localField" : "materialCode",
            "foreignField" : "_id", 
            "as" : "merchant_as" 
     { "$unwind" : "$merchant_as" },
        "$project" : {
            "_id" : 1,
            "name" : 1,
            "materialCode" : 1,
            "materialName" : "$merchant_as.name",
            "price" : "$merchant_as.price"
        "$group" : {
            "_id" : { "materialCode" : "$materialCode", "materialName" : "$materialName" },
            "count" : { "$sum" : 1 },
            "sum" : { "$sum" : "$price" },
            "avg" : { "$avg" : "$price" }
        "$match" : { 
             "count" : { "$gte" : 3 } 

2.3 使用postman的查询结果

"materialCode": "M00002", "materialName": "马可波罗瓷砖", "count": 3, "sum": 60.0, "avg": 20.0

3. 代码步骤解析

4. 小结

主要使用到mongo的聚合函数,理解了mongo中数据管道这个概念,理解起来就比较简单,所以建议使用MongoTemplate查询的时候,先在mongo中写一遍。所以如果不会mongo语法的童鞋,也建议先学学mongo。以上仅是我的一点经验、本人也是初学者,文章写得有问题还希望指出来,大家一起学习进步!

自己关于使用MongoTemplate的一点总结。1. 创建集合db.material.insert([ { "_id" : "M00001", "name" : "多乐士油漆", "price" : 80}, { "_id" : "M00002", "name" : "马可波罗瓷砖", "price" : 20 }, { "_id" : "M00003", "name": "海螺水泥", "price": 150 }, { "_id" : "M00004", "n. @Document("Schedule") @Accessors(chain = true) public class Schedule extends BaseMongoEntity { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "医院编号") @Indexed //.
适用人群IT从业相关人群,0~10年工作经验者 课程概述【技术选型】??SpringBoot2.x+MongoDB4.x+Vue均选用能进行生产环境部署的稳定版本【开发模式】前后端分离开发,即当前端又当后端,分角色开发【课程受益】一次上手,即学即会,提供全套源代码,直接可以运行【技术介绍】MongoDB目前NoSql中最流行的数据库,互联网的必备神器,目前最新的版本4.x;本课程针对4.x进行搭建和讲解;MongoDB?是一个基于分布式文件存储的数据库。由?C++?语言编写。旨在为?WEB?应用提供可扩展的高性能数据存储解决方案。?MongoDB?是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用
看了那么文章,还是官方api最好。。。。 http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo.aggregation 论坛上的这个可以当做例子: http://www.mkyong.com/mongodb/spring-data-mongodb-aggregation-grouping-ex
mongodb中对某一个字段的求和操作是通过 aggregate 来实现的:    例如:db.successCard.aggregate({$group:{_id:null,moneysum:{$sum:"$money"}}});    注意:被计算的字段必须是 整型,long或者浮点型 java对它的实现如下 * 计算某个字段是和 * @param colle
1.聚合的表达式 MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。 下表展示了一些聚合的表达式: 表达式描述实例 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial...
第三章:Aggregate 在上一篇文章,讲了spring-data-mongodb常用的增删改查(CRUD)操作,但是平时我们除了这些简单的操作外还需要进行一些复杂统计。本章就介绍mongodb 强大的聚合操作“Aggregate”。 一、Aggregate MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 co...
前言:由于最近做的一个物联网项目,需要通过传感器等进行监控,而传感器的的数据是通过mqtt进行上报的。传感器数量多且状态有改变就会发布数据提供订阅,因此数据量也较大,用传统的关系型数据库存储数据不实际,而且业务中不存在大量复杂的事务逻辑操作,可以避开事务机制(回滚)。综合考虑,使用mongodb进行传感器数据的存储。 1.导入maven包: <!--mongodb--> <dependency> <groupId>org.sp
requests是一个Python库,用于发送HTTP请求。它可以用于获取网页内容、发送POST请求、上传文件等。 MongoDB是一个开源的文档数据库,它使用JSON格式存储数据。MongoDB支持复杂的查询和聚合操作,可以处理大量的数据。 Pyecharts是一个Python库,用于创建交互式的图表。它支持多种图表类型,包括折线图、柱状图、散点图等。Pyecharts可以与Jupyter Notebook、Flask等Python框架集成,方便数据可视化。