Go语言读取MongoDB文档按姓名查询返回结果异常问题咨询
问题根因
你代码里的查询逻辑存在两处核心错误,完全和你预期的查询目标不符:
- 字段匹配错误:你要搜索的是用户名字段
Name(对应bson字段名name),但实际代码里写的查询条件是针对姓氏字段lastName - 查询操作符错误:你用了大于比较符
$gt做匹配,而非相等匹配符,这直接导致返回结果完全不符合预期
异常现象对应解释
结合你的测试数据可以完全复现你看到的结果:
- 测试数据里5条记录的
lastName分别是:Foo、Smith、Jill、Jill、Jill - 搜索
Jack时,查询条件是lastName > "Jack":字符串排序中Jill、Smith的字典序都大于Jack,只有Foo小于Jack,所以返回剩下4条记录,和你看到的结果一致 - 搜索
Mike时,查询条件是lastName > "Mike":字符串排序中只有Smith的字典序大于Mike,所以仅返回1条Mike Smith的记录,另一条Mike的lastName是Foo,字典序小于Mike所以未返回,也和你看到的结果一致
修复方案
修改findByFirstName函数里的查询条件即可,同时补充资源释放逻辑避免内存泄漏:
func findByFirstName(name string) { fmt.Println("looking for - ", name) client, ctx, cancel := getConnection() // 新增:释放连接资源 defer cancel() quickstart := client.Database("ginPlay") namesCollection := quickstart.Collection("names") var p []person // 修改:查询name字段等于传入参数的记录 nameObject, err := namesCollection.Find(ctx, bson.M {"name": name}) if err = nameObject.All(ctx, &p); err != nil { panic(err) } for i := 0; i < len(p); i++ { fmt.Println(p[i]) } }
修复后查询即可正确返回2条Mike的记录、3条Jack的记录。
内容的提问来源于stack exchange,提问作者Mike3355
相关产品推荐
相关产品推荐

