【Go开源宝藏】Go语言操作 MongoDB (三)

118 阅读1分钟

「这是我参与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字段中有FanOne1FanOne2的数据字段

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}}})

结果 在这里插入图片描述