您必须使用$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)
}