以下是一个示例代码,通过 Go 使用 Mongo 查询多条结果并将它们赋值给一个自定义的 Struct:
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
type Person struct {
Name string
Age int
Address string
}
func main() {
clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
client, err := mongo.Connect(context.Background(), clientOptions)
if err != nil {
log.Fatal(err)
}
collection := client.Database("testdb").Collection("people")
// 构建查询条件,查询所有年龄大于等于18岁的人
filter := bson.D{{"age", bson.D{{"$gte", 18}}}}
// 发起查询请求并获取结果
cur, err := collection.Find(context.Background(), filter)
if err != nil {
log.Fatal(err)
}
defer cur.Close(context.Background())
// 遍历结果并将其赋值给Person Struct
var people []Person
for cur.Next(context.Background()) {
var person Person
err := cur.Decode(&person)
if err != nil {
log.Fatal(err)
}
people = append(people, person)
}
if err := cur.Err(); err != nil {
log.Fatal(err)
}
fmt.Println(people)
}
在上面的代码中,我们首先建立了一个连接到 Mongo 数据库的客户端。然后,我们在 testdb
中选择了一个 people
集合,并使用 bson.D
构建了 our 的查询过滤条件。接下来,我们使用 collection.Find()
方法发起了查询请求,获取了一个游标 cur
。我们使用 cur.Next()
遍历了游标中的每条查询结果,并使用 cur.Decode()
将其解码为一个 Person
Struct。最后,我们将所有的 Person
Struct 添加到一个切片中并输出它。
注意,在这个例子中,我们将查询的结果赋值给了一个自定义的 Person
Struct。如果你有不同的需求,可以创建其他自定义 Struct,并通过类似的方式将查询的结果赋值给它们。