刚才一个朋友问了一个 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
2021年05月28日 18:04:56
真tm醉了,把所有结果查出来,手动累加,有毛用啊。搞不懂,返回结果是某个字段的累加值就不行吗