You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言读取MongoDB文档按姓名查询返回结果异常问题咨询

问题根因

你代码里的查询逻辑存在两处核心错误,完全和你预期的查询目标不符:

  1. 字段匹配错误:你要搜索的是用户名字段Name(对应bson字段名name),但实际代码里写的查询条件是针对姓氏字段lastName
  2. 查询操作符错误:你用了大于比较符$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:45:01