【问题标题】:golang mongodb (mgo) is not inserting docsgolang mongodb (mgo) 没有插入文档
【发布时间】:2016-01-07 19:46:08
【问题描述】:

我在使用 mgo 在 mongodb 中持久化 golang 结构时遇到问题。

type AN_Track_Log struct {
    Id                       bson.ObjectId `bson:"_id,omitempty"`
    user_session_id_str      string       `bson:"user_session_id_str"`

    googleanaly_pixel_id_str string `bson:"googleanaly_pixel_id_str"`
    perfaud_pixel_id_str     string `bson:"perfaud_pixel_id_str"`
    site_id_str              string `bson:"site_id_str"`
    metric_str               string `bson:"metric_str"`
    value_str                string `bson:"value_str"`
    event_str                string `bson:"event_str"`
    location_id_str          string `bson:"location_id_str"`
    referer_str              string `bson:"referer_str"`
    track_origin_str         string `bson:"track_origin_str"`
    fingerprint_str          string `bson:"fingerprint_str"`
    ...
}

p_track_log.Id = bson.NewObjectId()
err := p_mongodb_coll.Insert(&p_track_log)

问题在于,当 Insert() 调用完成时,唯一保留在数据库中的是一个空文档

{u'_id': ObjectId('561809d20037873154000003')}

我检查结构字段确实设置了,而不是空的。 关于为什么会发生这种情况的任何想法。 提示表示赞赏:) 谢谢你

【问题讨论】:

    标签: mongodb go mgo


    【解决方案1】:

    您需要以大写字母开头的字段名称来export。

    type AN_Track_Log struct {
      Id                       bson.ObjectId `bson:"_id,omitempty"`
      User_session_id_str      string       `bson:"user_session_id_str"`
    
      Googleanaly_pixel_id_str string `bson:"googleanaly_pixel_id_str"`
      ...
    }
    

    【讨论】:

    • 该死的,对! mgo 是一个外部包 :) 谢谢
    • 以此为基础 - 你应该根据 Go 约定命名你的字段 - UserSessionID 或 GoogleAnalyPixelID - 如果你的数据库需要 snake_case,请使用结构标签(就像你一样)。
    • 如果你想要一个大写字母的字段会发生什么?
    • @cdimitroulas 第一个字符必须是大写。所有其他字符都可以大写或小写。
    • 所以不可能有一个全小写字符的字段??这不是图书馆的巨大限制吗?您如何处理字段名称均为小写的现有数据?
    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 2014-09-14
    • 2015-07-21
    • 2019-05-09
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多