您必须使用$unset更新命令并手动提及数组键名及其索引。


更新命令:


_, err = collection.UpdateOne(

        ctx,

        bson.D{},  // <- Find Parameter

        bson.D{

            {"$unset", bson.D{

                {"expenses."+indexToRemove, 1},  // <- Removes `indexToRemove` th element from `expenses` array

            }},

        },

    )

完整的代码


package main


import (

    "context"

    "fmt"

    "go.mongodb.org/mongo-driver/bson"

    "go.mongodb.org/mongo-driver/mongo"

    "go.mongodb.org/mongo-driver/mongo/options"

    "time"

)


func main() {

    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)

    defer cancel()

    mClient, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))


    defer func() {

        if err = mClient.Disconnect(ctx); err != nil {

            panic(err)

        }

    }()


    collection := mClient.Database("temp").Collection("tmp10")


    ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second)

    defer cancel()


    var result bson.M

    err = collection.FindOne(ctx, bson.D{}).Decode(&result)

    fmt.Println(result)


    indexToRemove := "0"  // <- Input index to remove in string or convert it into string


    _, err = collection.UpdateOne(

        ctx,

        bson.D{},

        bson.D{

            {"$unset", bson.D{

                {"expenses."+indexToRemove, 1},  // <- Removes `indexToRemove` th element from `expenses` array

            }},

        },

    )

    if err != nil {

        fmt.Println(err)

    }


    err = collection.FindOne(ctx, bson.D{}).Decode(&result)

    fmt.Println(result)

}