dongqiangou5724 2018-01-28 11:45
浏览 143
已采纳

从go中获取mongo的普通json

I am trying to fetch some data from mongo in go and using gopkg.in/mgo.v2. I have a nested data in mongo.

Note: This is an old database I cannot change structure for and just want to query the data.

I have a database with fields id, name and details. and I have to get details based on id My code:

package main

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

type Person struct {
    Name string
    Id string
    Details string
}


func main() {

    session, err := mgo.Dial("mongodb://localhost:27017/naren")

    c := session.DB("naren").C("people")

    result := Person{}
    err = c.Find(bson.M{"id": "12345"}).One(&result)
    if err != nil {
        fmt.Println(err)
    }

    fmt.Println("Details:", result.Details)
    fmt.Println("Name:", result.Name)
    fmt.Println("Id:", result.Id)
}

Id and Name are printing fine but result.Details prints an empty string even when there is data. I just want to print json as string or am happy with a json data.

I have also tried

...
type Person struct { 
    ...
    Details string `json:"details"`
}

But still get empty string. Thanks in advance.

  • 写回答

1条回答 默认 最新

  • dongnai3960 2018-01-28 16:58
    关注

    I am very new to go. This seems very basic now. The value of key details was JSON

    The fix was that I changed the type of details to bson.M

    from

    type Person struct {
        Name string
        Id string
        Details string
    }
    

    to

    type Person struct {
        Name string
        Id string
        Details bson.M
    }
    

    now I can access the details like

    res, err := json.Marshal(result.Details)
    
    fmt.Println(string(res))
    

    Thanks @putu for pointing me to the right direction.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗