如何在Gogo的MGO mongo db驱动程序中获取我的文档的ObjectId(_id)

I'm working with MGO (cause I didn't found anything better that it). I'have played with it and have got some result but I don't understand how to get the _id (internal Mongo ObjectId) of document received?

For ex:

type FunnyNumber struct {
    Value int
    _id string
}

session, err := mgo.Dial("127.0.0.1:27017")
if err != nil {
    panic(err)
}
defer session.Close()

// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)

c := session.DB("m101").C("funnynumbers")

funnynumber := FunnyNumber{}
err = c.Find(bson.M{}).One(&funnynumber)
if err != nil {
    log.Fatal(err)
}

fmt.Println("Id one:", funnynumber._id)  // Nothing here? WHy? How to get it.
fmt.Println("Value one:", funnynumber.Value)  // 62. It's OK!

Could someone help me, please? Ot where might I read some info about it? I haven't found anything in the MGO doc

Schema of my document is:

{ "_id" : ObjectId("50778ce69331a280cf4bcf90"), "value" : 62 }

Thanks!

dongqin1167
dongqin1167 谢谢大家的帮助。Himanshu-我只想知道如何去做=)Peter-是的,但一定有可能)
2 年多之前 回复
doufen3563
doufen3563 _id不是导出的字段,这意味着mgo无法为其分配值。
2 年多之前 回复
drpp5680
drpp5680 使用mgo包获取对象ID
2 年多之前 回复

1个回答




  1. _id </ code>变量更改为大写(ID)以使其可导出。</ li >
  2. 使用 bson.ObjectID </ code>作为其类型。</ li>
  3. 为结构体 FunnyNumber </ code> ID变量添加标签。
    field </ li >
    </ ol>

    应该完成三件事来获取对象ID值。</ p>

      import“ labix.org/v2/mgo/  bson“ 
    
    

    type FunnyNumber struct {
    Value intjson:” value“
    ID bson.ObjectIdbson:” _ id,omitempty“`//仅可导出大写变量
    }
    < / code> </ pre>

    看看软件包 BSON 以便在使用mongodb时更了解使用bson标记</ p>
    </ div>

展开原文

原文

  1. Change _id variable to uppercase(ID) to make it exportable.
  2. Use bson.ObjectID as its type.
  3. Add tag for struct FunnyNumber Id variable. field

Above three things should be done to get object Id value.

import "labix.org/v2/mgo/bson"

type FunnyNumber struct {
    Value int `json:"value"`
    Id bson.ObjectId `bson:"_id,omitempty"`` // only uppercase variables can be exported
}

Take a look at package BSON for more understanding on using bson tags when working with mongodb

dongyulian5801
dongyulian5801 这并不烦人。 很高兴能提供帮助。 使用mongo时,还会将bson标记添加到struct中。
2 年多之前 回复
duanmian1085
duanmian1085 谢谢! 在您回答之前,我已经删除了我的问题,因为我不知道这是否对您不利。 谢谢。 而且我已经弄清楚了如何获取一个Int _id。 这里的ID类型为学生struct {名称字符串分数[] ScoreItem Id int bson:“ _ id,omitempty”}`''。 因此,我们应该确定我们期望的类型。
2 年多之前 回复
dongzhan8001
dongzhan8001 在插入文档之前,对象ID由mongo本身创建,直到创建为止。 如果创建的唯一ID是整数。 Mongo将其用作文档的唯一ID。
2 年多之前 回复
dpkrbe395930
dpkrbe395930 我们也可以使用Hex函数来获取对象ID的十六进制表示
2 年多之前 回复
doudu6100
doudu6100 Himanshu-非常感谢您的朋友! 你帮了我很多忙。 会检查一下。
2 年多之前 回复
drqn5418
drqn5418 json:“值”是封送至json时使用的标记。 看看bson包的String将ObjectId转换为字符串的十六进制表示形式
2 年多之前 回复
dongza6247
dongza6247 谢谢。 现在,我得到这个结果ObjectIdHex(“ 50778ce69331a280cf4bcfdd”),但我还有几个问题1)要将这个ID转换为正常值,应该使用** func ObjectIdHex **吗? 2)您能解释一下这些东西吗?-id bson.ObjectId吗? 这不是golang类型。 它是MGO.BSON的直接类型吗? 如果我不导出BSON包,该怎么办? 3)bson:“ _ id,omitempty”这是什么? 是否与Value int json:“ value”相同? 这是什么-> json:“ value”谢谢!
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问