如何在golang和mongodb中通过id查找

2023-12-24

我需要使用 ObjectIdHex 获取值并进行更新并查看结果。我正在使用 mongodb 和 golang。但是以下代码无法按预期工作

package main

import (
    "fmt"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
)

type Person struct {
    Id      bson.ObjectId `json:"id" bson:"_id,omitempty"`
    Name  string
    Phone string
}

func checkError(err error) {
    if err != nil {
        panic(err)
    }
}

const (
    DB_NAME       = "gotest"
    DB_COLLECTION = "pepole_new1"
)

func main() {
    session, err := mgo.Dial("localhost")
    checkError(err)
    defer session.Close()

    session.SetMode(mgo.Monotonic, true)

    c := session.DB(DB_NAME).C(DB_COLLECTION)
    err = c.DropCollection()
    checkError(err)

    ale := Person{Name:"Ale", Phone:"555-5555"}
    cla := Person{Name:"Cla", Phone:"555-1234-2222"}
    kasaun := Person{Name:"kasaun", Phone:"533-12554-2222"}
    chamila := Person{Name:"chamila", Phone:"533-545-6784"}

    fmt.Println("Inserting")
    err = c.Insert(&ale, &cla, &kasaun, &chamila)
    checkError(err)

    fmt.Println("findbyID")
    var resultsID []Person
    //err = c.FindId(bson.ObjectIdHex("56bdd27ecfa93bfe3d35047d")).One(&resultsID)
    err = c.FindId(bson.M{"Id": bson.ObjectIdHex("56bdd27ecfa93bfe3d35047d")}).One(&resultsID)
    checkError(err)
    if err != nil {
        panic(err)
    }
    fmt.Println("Phone:", resultsID)



    fmt.Println("Queryingall")
    var results []Person
    err = c.Find(nil).All(&results)

    if err != nil {
        panic(err)
    }
    fmt.Println("Results All: ", results)


}

FindId(bson.M{"Id": bson.ObjectIdHex("56bdd27ecfa93bfe3d35047d")}).One(&resultsID)不适合我并给我以下输出

Inserting
Queryingall
Results All:  [{ObjectIdHex("56bddee2cfa93bfe3d3504a1") Ale 555-5555} {ObjectIdHex("56bddee2cfa93bfe3d3504a2") Cla 555-1234-2222} {ObjectIdHex("56bddee2cfa93bfe3d3504a3") kasaun 533-12554-2222} {ObjectIdHex("56bddee2cfa93bfe3d3504a4") chamila 533-545-6784}]
findbyID
panic: not found

goroutine 1 [running]:
main.checkError(0x7f33d524b000, 0xc8200689b0)

我该如何解决这个问题?我需要使用 oid 获取价值并进行更新,我该怎么做


使用Golang官方驱动也可以进行同样的操作,如下:

// convert id string to ObjectId
objectId, err := primitive.ObjectIDFromHex("5b9223c86486b341ea76910c")
if err != nil{
    log.Println("Invalid id")
}

// find
result:= client.Database(database).Collection("user").FindOne(context.Background(), bson.M{"_id": objectId})
user := model.User{}
result.Decode(user)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在golang和mongodb中通过id查找 的相关文章

随机推荐

  • 自动递增跳过数字?

    注意 我是数据库和 PHP 新手 我有一个order设置为的列auto increment and unique 在我的 PHP 脚本中 我使用 AJAX 来获取新数据 但问题是 order跳过数字并且明显更高 因此迫使我在插入数据时手动更
  • 使用 PHP 删除编码

    我有以下文字 We 27re 20proud 20to 20introduce 20the 20Amazing 我想使用 PHP 删除编码 但是使用html entity decode 不起作用 有什么建议么 echo urldecode
  • JavaScript 中的布尔对象对于“false”参数返回 true

    我有一个小问题 我的 ajax 调用会返回一个字符串 有时该字符串是 假 我想始终将该字符串值转换为布尔值 我尝试过 新布尔值 thatValue 但即使参数为 false 它也会返回 true 有办法解决这个问题吗 除了我编写自己的自定义
  • 与加密流相比,DRM 的附加值是多少?

    这个问题是关于使用 MPEG DASH 和 或 HLS 的视频流 我试图了解商业 DRM 系统 例如 EZDRM BuyDRM 等 与简单的加密流媒体 例如 DRM 相比的附加值 AES 128 加密的 HLS 我对商业口号有点迷失了 因此
  • 创建具有最小高度的自定义 AppBarLayout 子项?

    我想创建一个自定义视图 它将成为 AppBarLayout 的子视图 我需要这个视图在向上滚动时部分折叠 但不是完全折叠 它将有一个最小高度 并在小尺寸模式下固定在 AppBarLayout 的顶部 然后当视图向下滚动时扩展到大尺寸模式 我
  • 指定一列的外键和另一列的值

    我有一张桌子ASSETS其结构如下所示 ID PK DESCRIPTION TYPE Do Do Dx Dx TYPE列有一个外键 可能的值为SECURITY or CURRENCY i e FX 我还有两张桌子 CURRENCIES 例如
  • nosql 数据库 - 这些有什么用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • “整数常量太大,以致于它是无符号的”编译器警告理由

    以下 C C 代码 long long foo 9223372036854775808LL 2 63 编译 g 并带有警告 整数常量太大 以至于它是无符号的 clang 给出了类似的警告 感谢这个错误报告 https gcc gnu org
  • 如何安装旧版本的composer [重复]

    这个问题在这里已经有答案了 我想安装旧版本的作曲家 我的命令是 php r copy https getcomposer org installer composer setup php php r if hash file sha384
  • PHP/MySQL 插入行然后获取“id”

    当我插入一行时 表的 id 字段会自动增加 我想插入一行然后获取该 ID 我会按照我说的那样做 但是有没有一种方法可以让我不用担心插入行和获取 id 之间的时间呢 我知道我可以在数据库中查询与输入的信息相匹配的行 但是变化很大 会有重复项
  • 如何将随机电话号码从数字转换为字典中的单词以及如何从文本中选择它并在Python中将其转换?

    我正在尝试使用以下代码使用字典将随机电话号码从数字转换为单词 dict 1 07 zero seven dict 2 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight dict 3 0 ze
  • Spring Boot 无法读取 Docker 中的 application.properties

    Spring Boot 在 Docker 容器中运行时不会读取应用程序属性 My 应用程序 yml server port 8080 context path mail custom greeting Hello YML Dockerfil
  • Django:FloatField 上的 ORDER BY DESC 将空值置于顶部?

    我很惊讶地发现 Django 中 FloatField 上的 ORDER BY DESC 查询返回的空字段高于具有正值的字段 In models py class City models Model name models CharFiel
  • C 和 C++ 之间的字符串文字差异

    据我所知 在 C 11 之前 C 和 C 之间的字符串文字处理方式几乎完全相同 现在 我承认 C 和 C 在处理宽字符串文字方面存在差异 我发现的唯一区别在于通过字符串文字初始化数组 char str 3 abc OK in C but n
  • 如何让 HoneySQL 将 order by 作为复合键处理?

    请注意 输出已被 风格化 因此在此处读起来更好 我有什么 sql format gt sqlh select sqlh from event sqlh merge where in field id 1673576 1945627 1338
  • jvm如何使用多核CPU资源?

    通常 一个java程序运行在一个名为 javaw 的进程中 当我运行一个进程时 我只能获得一个核心 多核 的最大资源 但是当我在jvm中运行多线程程序时 它使用的核心数是根据线程数而定的 这超出了一个进程可以处理的范围 那么谁能给我一些关于
  • Android Studio 两种风格,具有不同的清单文件

    我在 Android Studio 中为我的风格定义两个不同的清单文件时遇到问题 这是我当前的项目结构 The AndroidManifest xml in the free味道看起来像这样
  • Funq 在 ServiceStack 中的使用

    我怎样才能访问Container实例脱离控制器 我必须使用Container Resolve在我的课堂上 但我如何访问Container实例 是单例吗 我可以用吗new Container 或者有没有类似的链条Funq StaticCont
  • 如何将不在 highcharts 中 x 轴和 y 轴上的值传递给工具提示

    我需要在工具提示上显示其他值 名称 计数和另一个值 android 我在一个Example https stackoverflow com questions 11294326 highcharts pass multiple values
  • 如何在golang和mongodb中通过id查找

    我需要使用 ObjectIdHex 获取值并进行更新并查看结果 我正在使用 mongodb 和 golang 但是以下代码无法按预期工作 package main import fmt gopkg in mgo v2 gopkg in mg