「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」。
4. find 查询
4.1 单条查询
- 定义查询结果
var result PersonInfo
- 定义筛选条件
filter := bson.D{{"name", "FanOne0"}}
- 选择
err := Collection.FindOne(context.TODO(), filter).Decode(&result)
// 将结果Decode到result中
if err != nil {
log.Fatal(err)
}
fmt.Printf("Found a single document: %+v\n", result)
- 结果
4.2 多条查询
- 定义查询结果
var result []PersonInfo
- 定义过滤器
filter := bson.D{{"major", "Big Data"}}
- 数据库查询
res,err := Collection.Find(context.TODO(), filter)
- 结果赋值
_ = res.All(context.TODO(), &result)
- 结果
4.3 复合查询
4.3.1 $regex 模糊查询
查询名字包含1的数据
filter := bson.M{"name": bson.M{"$regex":"1"}}
查询
res,err := Collection.Find(context.TODO(), filter)
if err != nil {
log.Fatal(err)
}
_ = res.All(context.TODO(), &result)
fmt.Printf("result : %+v\n", result)
查询结果
4.3.2 in($in)
查询name字段
中有FanOne1
和FanOne2
的数据字段
filter := bson.M{"name": bson.M{"$in":[]string{"FanOne1","FanOne2"}}}
查询字段
如果是查询不存在就用 no in($nin)
关键字 进行查询
4.3.3 各种比较函数
!=
($ne)>
($gt)<
($lt)>=
($gte)<=
($lte)
例子:
filter := bson.M{"age": bson.M{"$gt": 1}}
选出age>1的数据
4.3.4 复合查询
- and($and)
查询 name是FanOne2
和 age是4
的数据
res, err := Collection.Find(context.TODO(), bson.M{"$and": []bson.M{{"name": "FanOne2"}, {"age": 4}}})
结果
- or($or)
查询 name是FanOne2
或者 age是2
的数据
res, err := Collection.Find(context.TODO(), bson.M{"$or": []bson.M{{"name": "FanOne2"}, {"age": 2}}})
结果