golang MongoDB 按条件分组
时间: 2024-10-23 22:13:57 浏览: 17
在 Go 语言中,如果你想要使用 MongoDB 进行按条件分组,你可以利用官方提供的 `go-mongodb-driver` 库。首先,你需要连接到 MongoDB 数据库,然后通过 `Collection.Find()` 方法查询数据,并使用 `aggregate()` 函数来进行分组操作。下面是一个简单的示例:
```go
package main
import (
"context"
"fmt"
"log"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
// 连接 MongoDB
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017/")
client, err := mongo.Connect(context.TODO(), clientOptions)
if err != nil {
log.Fatal(err)
}
defer client.Disconnect(context.TODO())
// 假设我们有一个名为 "orders" 的集合
collection := client.Database("your_database").Collection("orders")
// 定义分组条件(例如,按用户ID分组并计算每个用户的订单总数)
.pipeline := []bson.D{
{ // 第一个阶段:匹配文档
"$match": bson.M{"status": "completed"},
},
{ // 第二个阶段:分组
"$group": bson.M{
"_id": "$userId", // 分组键
"count": bson.M{"$sum": 1}, // 计算每个组的数量
},
},
}
result, err := collection.Aggregate(context.TODO(), pipeline)
if err != nil {
log.Fatal(err)
}
defer result.Close(context.TODO())
// 遍历结果并打印
for result.Next(ctx) {
var doc struct {
ID string `bson:"_id"`
OrderCount int `bson:"count"`
}
err = result.Decode(&doc)
if err != nil {
log.Fatal(err)
}
fmt.Printf("User %s has %d orders completed.\n", doc.ID, doc.OrderCount)
}
if err := result.Err(); err != nil {
log.Fatal(err)
}
阅读全文