mongodb 聚合在 golang 中给出错误
mongodb aggregation gives error in golang
我想要分组方法类型并根据它们进行计数types.these方法是字符串。我在下面写 code.But 它给出了一个错误。
pipeline := []bson.D{
bson.D{
{"$unwind", "$method"},
},
bson.D{
{"$group", bson.M{"_id": "$method", "count": bson.M{"$sum": 1}}},
},
query := bson.D{
{"aggregate", "API_ACCESS_LOGS"}, // useragents is a collection name
{"pipeline", pipeline},
}
err = session.DB("vamps-logs").Run(query, &methods)
它给出了以下错误。
2018/02/06 09:58:33 http:紧急服务 127.0.0.1:53973:运行时错误:索引超出范围
协程 92 [运行]:
请帮我更正一下
您好,这是我修改后的示例代码,以便将管道与 MgO golang 一起使用。观看它并尝试应用它。
主包
import ("fmt"
"log"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type Method struct {
Type string `json:"Type" bson:"Type"`
Host float64 `json:"Host" bson:"Host"`
}
type Out struct {
Type string `json:"Type" bson:"Type"`
Count float64 `json:"count" bson:"count"`
}
func main() {
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
c := session.DB("test").C("api")
// err = c.Insert(&Method{"GET", 1.0},
// &Method{"PUT", 2.0},
// &Method{"POST", 2.0})
if err != nil {
log.Fatal(err)
}
pipe := c.Pipe(
[]bson.M{
bson.M{
"$unwind":"$Type",
},
bson.M{
"$group":bson.M{
"_id":"$Type",
"count":bson.M{"$sum":1,},
},
},
bson.M{
"$project":bson.M{
"Type":"$_id" , "count":"$count",
},
},
},
)
result := []Out{}
// err = c.Find(bson.M{"Type": "GET" }).One(&result)
err = pipe.All(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println("Type:", result)
}
mongoDB
中的数据集
/* 1 */
{
"_id" : ObjectId("5a794efd49d755038cc60307"),
"Type" : "GET",
"Host" : 1.0
}
/* 2 */
{
"_id" : ObjectId("5a794efd49d755038cc60308"),
"Type" : "PUT",
"Host" : 2.0
}
/* 3 */
{
"_id" : ObjectId("5a794efd49d755038cc60309"),
"Type" : "POST",
"Host" : 2.0
}
/* 4 */
{
"_id" : ObjectId("5a794f3149d755038cc6031a"),
"Type" : "GET",
"Host" : 1.0
}
/* 5 */
{
"_id" : ObjectId("5a794f3149d755038cc6031b"),
"Type" : "PUT",
"Host" : 2.0
}
/* 6 */
{
"_id" : ObjectId("5a794f3149d755038cc6031c"),
"Type" : "POST",
"Host" : 2.0
}
输出
类型:[{POST 2} {PUT 2} {GET 2}]
我想要分组方法类型并根据它们进行计数types.these方法是字符串。我在下面写 code.But 它给出了一个错误。
pipeline := []bson.D{
bson.D{
{"$unwind", "$method"},
},
bson.D{
{"$group", bson.M{"_id": "$method", "count": bson.M{"$sum": 1}}},
},
query := bson.D{
{"aggregate", "API_ACCESS_LOGS"}, // useragents is a collection name
{"pipeline", pipeline},
}
err = session.DB("vamps-logs").Run(query, &methods)
它给出了以下错误。
2018/02/06 09:58:33 http:紧急服务 127.0.0.1:53973:运行时错误:索引超出范围 协程 92 [运行]:
请帮我更正一下
您好,这是我修改后的示例代码,以便将管道与 MgO golang 一起使用。观看它并尝试应用它。 主包
import ("fmt"
"log"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type Method struct {
Type string `json:"Type" bson:"Type"`
Host float64 `json:"Host" bson:"Host"`
}
type Out struct {
Type string `json:"Type" bson:"Type"`
Count float64 `json:"count" bson:"count"`
}
func main() {
session, err := mgo.Dial("localhost")
if err != nil {
panic(err)
}
defer session.Close()
// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)
c := session.DB("test").C("api")
// err = c.Insert(&Method{"GET", 1.0},
// &Method{"PUT", 2.0},
// &Method{"POST", 2.0})
if err != nil {
log.Fatal(err)
}
pipe := c.Pipe(
[]bson.M{
bson.M{
"$unwind":"$Type",
},
bson.M{
"$group":bson.M{
"_id":"$Type",
"count":bson.M{"$sum":1,},
},
},
bson.M{
"$project":bson.M{
"Type":"$_id" , "count":"$count",
},
},
},
)
result := []Out{}
// err = c.Find(bson.M{"Type": "GET" }).One(&result)
err = pipe.All(&result)
if err != nil {
log.Fatal(err)
}
fmt.Println("Type:", result)
}
mongoDB
中的数据集/* 1 */
{
"_id" : ObjectId("5a794efd49d755038cc60307"),
"Type" : "GET",
"Host" : 1.0
}
/* 2 */
{
"_id" : ObjectId("5a794efd49d755038cc60308"),
"Type" : "PUT",
"Host" : 2.0
}
/* 3 */
{
"_id" : ObjectId("5a794efd49d755038cc60309"),
"Type" : "POST",
"Host" : 2.0
}
/* 4 */
{
"_id" : ObjectId("5a794f3149d755038cc6031a"),
"Type" : "GET",
"Host" : 1.0
}
/* 5 */
{
"_id" : ObjectId("5a794f3149d755038cc6031b"),
"Type" : "PUT",
"Host" : 2.0
}
/* 6 */
{
"_id" : ObjectId("5a794f3149d755038cc6031c"),
"Type" : "POST",
"Host" : 2.0
}
输出
类型:[{POST 2} {PUT 2} {GET 2}]