MGO – 从Mongo返回了空结果,该结果应该有结果。

huangapple go评论89阅读模式
英文:

MGO - empty results returned from Mongo that has results

问题

我有一个GOLANG结构体如下:

type OrgWhoAmI struct {
    FriendlyName    string        `json:"friendlyName"`
    RedemptionCode  string        `json:"redemptionCode"`
    StartUrls       []StartUrl    `json:"startUrls"`
    Status          string        `json:"status"`
    Children        []OrgChildren `json:"childrenReemptionCodes"`
}

type StartUrl struct {
    DisplayName string `json:"displayName"`
    URL         string `json:"url"`
}

type OrgChildren struct {
    FriendlyName   string `json:"childFriendlyName"`
    RedemptionCode string `json:"childRedemptionCode"`
}

我已经创建并成功插入了一些记录到MongoDB集合中(通过使用CLI mongo程序查询MongoDB,我可以看到结果),但是当我使用以下的MGO查询时,我得不到任何结果:

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

    // 查询所有记录
    collection := session.DB("OrgData").C("orgWhoAmI")
    var results []OrgWhoAmI
    err = collection.Find(bson.M{}).All(&results)
    if err != nil {
        panic(err)
    }
    for _, res := range results {
        fmt.Printf("Result: %s|%s\n", res.FriendlyName, res.RedemptionCode)
    }
}

打印的结果是:

Result: |
Result: |
Result: |
Result: |

如果我查询记录的数量,我可以得到正确的数字,但是所有字段的值都是空的。不确定我漏掉了什么。

英文:

I have a GOLANG struct as follows:

type OrgWhoAmI struct {
FriendlyName            string        `json:"friendlyName"`
RedemptionCode          string        `json:"redemptionCode"`
StartUrls               []StartUrl    `json:"startUrls"`
Status                  string        `json:"status"`
Children                []OrgChildren `json:"childrenReemptionCodes"`
}

type StartUrl struct {
DisplayName string `json:"displayName"`
URL         string `json:"url"`
}

type OrgChildren struct {
FriendlyName   string `json:"childFriendlyName"`
RedemptionCode string `json:"childRedemptionCode"`
}

I've created and successfully inserted records into a MongoDB collection (as I can see the results by querying Mongo with the CLI mongo program) - but when I query with MGO as follows, I get nothing:

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

    // Query All
    collection := session.DB("OrgData").C("orgWhoAmI")
var results []OrgWhoAmI
err = collection.Find(bson.M{}).All(&results)
if err != nil {
    panic(err)
}
for _, res := range results {
    fmt.Printf("Result: %s|%s\n", res.FriendlyName, res.RedemptionCode)
}
}

The results printed are:

Result: |
Result: |
Result: |
Result: |

If I ask for the count for records, I get the correct number, but all values for all fields are blank. Not sure what I'm missing here.

答案1

得分: 7

如果你不是用Go语言创建它们,那么它可能没有正确地对键名进行序列化。BSON的默认行为是将键名转换为小写,所以如果你想要其他形式的键名,你需要进行指定。另外请注意,在OrgWhoAmI结构体中,json:"childrenReemptionCodes"这一行有一个拼写错误(应该是Redemption,我猜测)。如果你希望BSON和JSON的键名不同,你可以分别进行指定。

type OrgWhoAmI struct {
   FriendlyName            string        `bson:"friendlyName" json:"friendlyName"`
   RedemptionCode          string        `bson:"redemptionCode" json:"redemptionCode"`
   StartUrls               []StartUrl    `bson:"startUrls" json:"startUrls"`
   Status                  string        `bson:"status" json:"status"`
   Children                []OrgChildren `bson:"childrenRedemptionCodes" json:"childrenRedemptionCodes"`
}

type StartUrl struct {
   DisplayName string `bson:"displayName" json:"displayName"`
   URL         string `bson:"url" json:"url"`
}

type OrgChildren struct {
   FriendlyName   string `bson:"childFriendlyName" json:"childFriendlyName"`
   RedemptionCode string `bson:"childRedemptionCode" json:"childRedemptionCode"`
}
英文:

If you aren't creating them in go, it's probably not serializing the key names for you properly. The default for bson is to lowercase the keys, so you need to specify it if you want something else. Also note that you have a typo in OrgWhoAmI for json:"childrenReemptionCodes" (should be Redemption, I'm guessing). You can specify both bson and json separately if you want them to be different.

type OrgWhoAmI struct {
   FriendlyName            string        `bson:"friendlyName" json:"friendlyName"`
   RedemptionCode          string        `bson:"redemptionCode" json:"redemptionCode"`
   StartUrls               []StartUrl    `bson:"startUrls" json:"startUrls"`
   Status                  string        `bson:"status" json:"status"`
   Children                []OrgChildren `bson:"childrenRedemptionCodes" json:"childrenRedemptionCodes"`
}

type StartUrl struct {
   DisplayName string `bson:"displayName" json:"displayName"`
   URL         string `bson:"url" json:"url"`
}

type OrgChildren struct {
   FriendlyName   string `bson:"childFriendlyName" json:"childFriendlyName"`
   RedemptionCode string `bson:"childRedemptionCode" json:"childRedemptionCode"`
}

huangapple
  • 本文由 发表于 2014年1月3日 02:20:45
  • 转载请务必保留本文链接:https://go.coder-hub.com/20889226.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定