当前位置: 首页 > 面试题库 >

从mgo查询获取ObjectIdHex值

霍修筠
2023-03-14
问题内容

我仍然很陌生,尽管在SO上看到与此类似的多个问题,但我无法重现某些OP所要求的输出。

我正在做一些相当简单的事情,我users在mongo中找到了一个集合,而我要做的就是将_id值作为字符串返回。我将最终将这些问题_id推向NSQ,但这是我的首要任务。

var users []bson.M
err = sess.DB("db_name").C("users").Find(bson.M{}).All(&users)

if err != nil {
    os.Exit(1)
}

for _, user := range users {
    fmt.Printf("%+v \n", user["_id"])
}

今天输出:

ObjectIdHex("537f700b537461b70c5f0000")
ObjectIdHex("537f700b537461b70c600000")
ObjectIdHex("537f700b537461b70c610000")
ObjectIdHex("537f700b537461b70c620000")

我浏览了bson#m文档,并认为我正确使用了地图以增加价值。所以我认为,我的查询结果是:

{"_id" : ObjectIdHex("Some_ID") }

但是如果ObjectIdHex(“ ID”)是值,我该如何简单地在其中获取字符串。

所以理想的输出:

"537f700b537461b70c5f0000"
"537f700b537461b70c600000"
"537f700b537461b70c610000"
"537f700b537461b70c620000"

问题答案:

与key关联的值"_id"的类型bson.ObjectId仅为a
string

bson.M是一个类型map[string]interface{},因此您需要Type断言来将id作为一个获取ObjectId

objid, ok := m["_id"].(ObjectId)
if !ok {
    panic("Not ObjectId")
}

并且ObjectId具有一种ObjectId.Hex()方法,该方法可精确返回您想要的内容:对象ID作为“纯”十六进制字符串:

fmt.Println(objid.Hex())

备择方案

objid可以简单地转换为,string因为其基础类型为string。因此,您可以使用许多其他选项将其转换为十六进制string

hexid := fmt.Sprintf("%x", string(objid))

如果只想打印它,则可以直接执行以下操作:

fmt.Printf("%x", string(objid))

注意:
将其转换为string非常重要,否则fmt程序包将调用其String()方法,该方法将产生类似的字符串,ObjectIdHex("537f700b537461b70c5f0000")而这将被转换为十六进制,这显然不是您想要的。

或者,
您可以使用encoding/hex包和hex.EncodeToString()函数:

hexid := hex.EncodeToString([]byte(objid))


 类似资料:
  • 问题内容: 在我的代码中,我正在使用。 然后,我执行该方法以填充准备好的语句的通配符。 在调用该方法并执行查询之前,我是否有办法检索(并打印出)最终查询?我只想将此用于调试目的。 问题答案: 这在JDBC API合同中没有定义,但是如果幸运的话,有问题的JDBC驱动程序可以通过调用来返回完整的SQL 。即 以我的经验,至少这样做是PostgreSQL 8.x和MySQL 5.x JDBC驱动程序。

  • 问题内容: 我正在尝试连接到数据库,运行查询并打印出查询。到目前为止,我已经完成了工作,但是我需要获取输出并将其中的特定部分分配给 我正在使用log4jdbc监视我的查询。 此刻,我得到如下记录的输出: 我想分配给。我该怎么做呢? 问题答案: 通常,a 将为您提供查询(包括绑定参数)。但这取决于的实际实现(例如,使用PostgreSQL隐式实现)。 您提到为您带来回报。我对 log4jdbc 并不

  • 问题内容: 根据MSDN,返回已执行查询的列元数据。我想知道是否有类似的方法将为给定查询提供表元数据?我的意思是涉及哪些表以及它具有什么别名。 在我的应用程序中,我得到了查询,并且需要以编程方式附加该子句。使用,我可以获取列元数据及其所属的表。但是,即使表具有别名,它仍然会返回真实的表名。有没有办法获取该表的别名? 以下代码显示如何获取列元数据。 这将为我正确提供列的详细信息。但是当我看到列时,它

  • 问题内容: 我需要的是将URL 的值转换成变量,然后在jQuery代码中使用它: 有谁知道如何使用JavaScript或jQuery来获取该价值? 问题答案: 这就是你所需要的:) 以下代码将返回一个包含URL参数的JavaScript对象: 例如,如果您具有URL: 此代码将返回: 您可以执行以下操作:

  • 问题内容: 我需要从Hibernate查询中获取字符串,并稍后进行处理(因此无法使用来解决)。 我已经看过如何从HibernateCriteriaAPI(并非用于记录日志)中获取SQL,但是有了这种解决方法,我得到了SQL查询字符串,但是没有显示它显示’?’的参数值,有没有办法获得带有参数值的完整SQL字符串? 我的意思是,有了这种解决方案,我可以得到,但我需要得到… 有想法吗? 问题答案: 有一

  • 问题内容: 我的Web应用程序中有一个管理控制台,允许管理员在数据库上执行自定义SQL SELECT查询。 在下面,该应用程序正在使用Hibernate,但是这些查询不是HQL,它们是纯SQL,因此我使用的是本机查询,如下所示: 这可以正常工作,但是它只返回数据行,没有额外的信息。我还想获取列名,因此当我将结果打印回用户时,我还可以打印标题以显示各个列。 有什么办法吗? 问题答案: 经过很长一段时