亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 mongo-driver 在 Go 中執行聚合

如何使用 mongo-driver 在 Go 中執行聚合

Go
叮當貓咪 2023-08-14 17:03:02
我有一個包含 3 個字段的 MongoDB 集合:_id: ObjectIdfield1: Numberfield2: Number我正在進行此聚合以獲得“不同的”field1/field2 行并計算結果總數。這在客戶端(Robo3t)中工作正常:db.mycollection.aggregate([    {        $group: {             _id: { field1: "$field1", field2: "$field2" },        }    },    {         $group: {             _id: null, count: { $sum: 1 }         }     }])結果:{    "_id" : null,    "count" : 57.0}我如何使用mongo-driver在 Go 中進行這種聚合?有這種方法可以執行聚合,但我不清楚文檔。我知道我應該做某種 bson 查詢,但我不知道從哪里開始。
查看完整描述

2 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

group :=[]bson.M{bson.M{

    "$group": bson.M{

        "_id":bson.M{

            "field1": "$field1",

            "field2": "$field2"

        }

    }

},

bson.M {

    "$group": bson.M{

        "_id":nil,

        "count": bson.M{

            "$sum":1

        }

    }

}


cursor, err := coll.Aggregate(context.Background(), mongo.Pipeline{group})

if err != nil {

    log.Fatal(err)

}

嘗試上面的解決方案,它會起作用。


查看完整回答
反對 回復 2023-08-14
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

為了補充已接受的解決方案,我將共享帶有光標迭代和解碼的完整代碼。我將 更改"_id": nil為"_id": ""來接收字符串并能夠毫無問題地解碼為結構。


pipeline := []bson.M{

    {

        "$group": bson.M{"_id": bson.M{"field1": "$field1", "field2": "$field2"}},

    },

    {

        "$group": bson.M{"_id": "", "count": bson.M{"$sum": 1}},

    },

}


cursor, err := coll.Aggregate(ctx, pipeline)

if err != nil {

    return err

}

type Result struct {

    ID    string `bson:"_id"`

    Count int    `bson:"count"`

}

var res Result

for cursor.Next(ctx) {

    err := cursor.Decode(&res)

    if err != nil {

        return err

    }

    fmt.Printf("Element %v", res)

}


查看完整回答
反對 回復 2023-08-14
  • 2 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號