使用mgo在MongoDB中插入数据

时间:2017-01-23 01:17:24

标签: mongodb go mgo

我正在尝试使用mgo在MongoDB中插入一些数据,但结果并非我想要的结果。

我的结构

def initialize(COULD BE A USER OR ADMIN, scope)
  @user = USER OR ADMIN
  @scope = scope
end

def update?
  return true if user is either resource.user or ANY ADMIN
end

我的插入声明

    type Slow struct {
    Endpoint string
    Time     string
    }

我是如何打印的

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

我的输出(Marshaled JSON)

    var results []Slow

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

我想要什么

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

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,您似乎希望按Endpoint排序结果。如果在查询时未指定任何排序顺序,则无法保证任何特定顺序。所以像这样查询它们:

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

接下来,您想要的不是结果的JSON表示。要获得所需的格式,请使用以下循环:

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

输出正如您所期望的那样(在Go Playground上尝试):

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