mongodb Java代码实现聚合函数sum统计

avatar 2020年09月27日18:10:09 7 3894 views
博主分享免费Java教学视频,B站账号:Java刘哥

刚才一个朋友问了一个 mogodb 的问题,如果通过 Java代码操作 mongodb 实现类似 mysql 中 sum() 函数的功能。

直接贴代码

1、依赖

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver</artifactId>
    <version>3.2.2</version>
</dependency>

 

2、Demo 

import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.*;
import org.bson.Document;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 言曌
 * @date 2020/9/27 4:37 下午
 */

public class Demo {

    public static void main(String[] args) {

        ServerAddress serverAddress = new ServerAddress("localhost", 27017);
        List<ServerAddress> addrs = new ArrayList<ServerAddress>();
        addrs.add(serverAddress);

        // MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
        MongoCredential credential = MongoCredential.createScramSha1Credential("root", "admin", "123456".toCharArray());
        List<MongoCredential> credentials = new ArrayList<MongoCredential>();
        credentials.add(credential);

        // 通过连接认证获取MongoDB连接
        MongoClient mongoClient = new MongoClient(addrs, credentials);

        // 连接到数据库, admin 是数据库名
        MongoDatabase mongoDatabase = mongoClient.getDatabase("admin");
        MongoCollection<Document> collection = mongoDatabase.getCollection("article");

        // 打印所有数据
        FindIterable<Document> res = collection.find();
        res.forEach(new Block<Document>() {
            public void apply(Document _doc) {
                System.out.println(_doc.toJson());
            }
        });


        // 统计所有文章的访问量
        Document sub_group = new Document();
        sub_group.put("_id", "0");
        sub_group.put("count", new Document("$sum", "$views"));// views 是字段名

        Document group = new Document("$group", sub_group);

        List<Document> aggregateList = new ArrayList<Document>();
        aggregateList.add(group);

        AggregateIterable<Document> aggregate = collection.aggregate(aggregateList);
        MongoCursor<Document> cursor = aggregate.iterator();

        try {
            while (cursor.hasNext()) {
                Document item_doc = cursor.next();
                int count = item_doc.getInteger("count");
                System.out.println("views sum: " + count);
                break;
            }
        } finally {
            cursor.close();
        }
    }


}

 

3、补充, mongodb常用命令

因为我的 Mac 之前更新了,导致 /data 目录被删除了,又没有权限创建。之前的 mongodb 无法启动

所以直接使用 homebrew 安装了一下

1)安装 mongodb

brew install mongodb

 

2)启动 mongodb

brew services start

 

3)打开 mongodb 命令行

mongo

 

4)切换到 admin 数据库

use admin

 

5)创建用户

db.createUser(
    {
        user:"root",
        pwd:"123456",
        roles:[{role:"dbOwner",db:"admin"}]
    }
}

 

6) 创建集合

db.createCollection("article")

 

7) 插入文档

db.article.insert({
    "id": 1,
    "title": "再别康桥",
    "views": NumberInt(20)
})

 

8) 删除文档

db.article.remove({'id': 1})

 

9)查询所有文档

db.article.find()

 

10)根据条件筛选查询文档

db.article.find({'id': 2})

 

11)求 views 字段的之和

db.article.aggregate([{$group : {_id : 0,  sum : {$sum : "$views"}}}])

 

其他就不贴了,可以参考

https://www.runoob.com/mongodb/mongodb-tutorial.html

 

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:1   待审核评论数:0
  1. avatar 123213

    真tm醉了,把所有结果查出来,手动累加,有毛用啊。搞不懂,返回结果是某个字段的累加值就不行吗