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

直接贴代码

1、依赖

org.mongodb

mongodb-driver

3.2.2

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 addrs = new ArrayList();

addrs.add(serverAddress);

// MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码

MongoCredential credential = MongoCredential.createScramSha1Credential("root", "admin", "123456".toCharArray());

List credentials = new ArrayList();

credentials.add(credential);

// 通过连接认证获取MongoDB连接

MongoClient mongoClient = new MongoClient(addrs, credentials);

// 连接到数据库, admin 是数据库名

MongoDatabase mongoDatabase = mongoClient.getDatabase("admin");

MongoCollection collection = mongoDatabase.getCollection("article");

// 打印所有数据

FindIterable res = collection.find();

res.forEach(new Block() {

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 aggregateList = new ArrayList();

aggregateList.add(group);

AggregateIterable aggregate = collection.aggregate(aggregateList);

MongoCursor 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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐