golang mongodb 聚合
时间: 2023-07-08 19:42:56 浏览: 149
在 Golang 中使用 MongoDB 聚合操作可以通过 mgo 库来实现,具体步骤如下:
1. 创建 MongoDB 的会话
```
session, err := mgo.Dial("mongodb://localhost:27017")
if err != nil {
panic(err)
}
defer session.Close()
```
2. 获取聚合操作的管道
```
c := session.DB("mydb").C("mycollection")
pipe := c.Pipe([]bson.M{})
```
3. 添加聚合操作的阶段
```
pipe.Match(bson.M{"$match": bson.M{"age": bson.M{"$gt": 18}}})
pipe.Group(bson.M{"$group": bson.M{"_id": "$gender", "count": bson.M{"$sum": 1}}})
```
4. 执行聚合操作,并获取结果
```
var result []bson.M
err = pipe.All(&result)
if err != nil {
panic(err)
}
for _, r := range result {
fmt.Println(r)
}
```
以上代码实现了对 mycollection 集合中年龄大于 18 岁的文档进行分组统计,按照性别进行分组,并计算每个分组的文档数量。
相关问题
golang MongoDB 分组带条件
在 Go 语言中,如果你想要使用 MongoDB 进行分组操作并且带有一定的查询条件,通常会通过官方提供的 `go.mongodb.org/mongo-driver` 库来实现。你可以使用 `aggregation` 操作来完成这个任务。以下是一个简单的示例:
```go
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
client, err := mongo.Connect(context.Background(), options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
fmt.Printf("Error connecting to MongoDB: %v\n", err)
return
}
defer client.Disconnect(context.Background())
collection := client.Database("yourDatabaseName").Collection("yourCollectionName")
.pipeline := []mongo AggregationStage{
{ // 查询阶段,设置条件
Spec: bson.D{{"fieldToFilter", "someValue"}},
},
{ // 分组阶段
$group: bson.M{
"_id": "$anotherField", // 需要分组的关键字段
"sumField": { $sum: "$yetAnotherField" }, // 计算某个字段的总和或其他聚合函数
},
},
}
result, err := collection.Aggregate(context.Background(), pipeline, options.Aggregate().SetCursorBatchSize(100))
if err != nil {
fmt.Printf("Error executing aggregation: %v\n", err)
return
}
// 遍历结果并打印
for result.Next(ctx) {
var doc bson.D
err = result.Decode(&doc)
if err != nil {
fmt.Printf("Error decoding document: %v\n", err)
continue
}
fmt.Println(doc)
}
if err := result.Err(); err != nil {
fmt.Printf("Error reading results: %v\n", err)
}
```
在这个例子中,你需要将 `"yourDatabaseName"`、`"yourCollectionName"` 和字段名替换为你实际的数据库和集合名称。`$group` 部分指定了你想按哪个字段进行分组,并对哪个字段进行了求和操作。`$filter` 部分是你可以添加的查询条件。
阅读全文