dongxizhe9755 2017-01-23 01:17
浏览 41
已采纳

使用mgo在MongoDB中插入数据

I'm trying to insert some data in MongoDB using mgo but the outcome is not what I wanted.

My struct

    type Slow struct {
    Endpoint string
    Time     string
    }

My insert statement

err := collection.Insert(&Slow{endpoint, e}) 
if err != nil {
    panic(err)
}

How I'm trying to print it

    var results []Slow

    err := collection.Find(nil).All(&results)
    if err != nil {
        panic(err)
    }   
    s, _ := json.MarshalIndent(results, "  ", "  ")
    w.Write(s)

My output (Marshaled JSON)

   [{
       "Endpoint": "/api/endpoint1",
       "Time": "0.8s"
    },
    {
       "Endpoint": "/api/endpoint2",
       "Time": "0.7s"
    }]

What I wanted

    {
      "/api/endpoint1":"0.8s",
      "/api/endpoint2":"0.7s"
    }
    //No brackets

Thank you.

  • 写回答

1条回答 默认 最新

  • douyong1974 2017-01-23 08:46
    关注

    First, you seem to want the results sorted by Endpoint. If you don't specify any sort order when querying, you can have no guarantee of any specific order. So query them like this:

    err := collection.Find(nil).Sort("endpoint").All(&results)
    

    Next, what you want is not the JSON representation of the results. To get the format you want, use the following loop:

    w.Write([]byte{'{'})
    for i, slow := range results {
        if i > 0 {
            w.Write([]byte{','})
        }
        w.Write([]byte(fmt.Sprintf("
    \t\"%s\":\"%v\"", slow.Endpoint, slow.Time)))
    }
    w.Write([]byte("
    }"))
    

    Output is as you expect it (try it on the Go Playground):

    {
        "/api/endpoint1":"0.8s",
        "/api/endpoint2":"0.7s"
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥15 编译arm板子的gcc
    • ¥20 C语言用栈实现无向图邻接矩阵广度优先遍历
    • ¥15 C++代码报错问题,c++20协程
    • ¥15 c++图Djikstra算法求最短路径
    • ¥15 Linux操作系统中的,管道通信问题
    • ¥15 ansible tower 卡住
    • ¥15 等间距平面螺旋天线方程式
    • ¥15 通过链接访问,显示514或不是私密连接
    • ¥100 系统自动弹窗,键盘一接上就会
    • ¥50 股票交易系统设计(sql语言)