BSON
BSON(Binary JSON,MongoDB 的数据格式)中的 EDMA 类型
- E: Element (键值对元素)
- D: Document (有序文档,保持插入顺序)
- M: Map (无序文档,类似Go的map)
- A: Array (数组)
E 类型:bson.E
一个普普通通的键值对结构体,Value 可以是其他三个
import "go.mongodb.org/mongo-driver/bson"
// 创建一个简单的键值对
e := bson.E{Key: "name", Value: "Alice"}
// 嵌套其他BSON类型
nestedE := bson.E{
Key: "profile",
Value: bson.D{
{Key: "age", Value: 30},
{Key: "active", Value: true},
},
}
D 类型:bson.D
本质上一个 E 的切片
import "go.mongodb.org/mongo-driver/bson"
// 创建有序文档
filter := bson.D{
{Key: "age", Value: bson.D{{Key: "$gt", Value: 25}}},
{Key: "status", Value: "active"},
}
// 用于复杂查询条件
query := bson.D{
{Key: "$and", Value: bson.A{
bson.D{{Key: "price", Value: bson.D{{Key: "$lt", Value: 100}}}},
bson.D{{Key: "quantity", Value: bson.D{{Key: "$gt", Value: 0}}}},
}},
}
M 类型:bson.M
本质上一个 Map,key 必须是 string,value 是 any,也可以是其他三种
import "go.mongodb.org/mongo-driver/bson"
// 创建无序文档
doc := bson.M{
"name": "Bob",
"age": 42,
"hobbies": bson.A{"reading", "cycling"},
"address": bson.M{
"city": "New York",
"zipcode": "10001",
},
}
// 用于更新操作
update := bson.M{
"$set": bson.M{
"lastLogin": time.Now(),
"status": "online",
},
}
A 类型:bson.A
切片,元素可以是其他三种
import "go.mongodb.org/mongo-driver/bson"
// 创建数组
hobbies := bson.A{"swimming", "hiking", "cooking"}
// 混合类型数组
mixedArray := bson.A{
123,
"string value",
true,
bson.D{{Key: "nestedDoc", Value: "value"}},
bson.M{"key": "value"},
bson.A{1, 2, 3},
}