Mongodb 如何使用Go官方驱动程序执行addToSet?

Mongodb 如何使用Go官方驱动程序执行addToSet?,mongodb,go,mongo-go,Mongodb,Go,Mongo Go,我需要使用官方Go MongoDB驱动程序执行addToSet操作 在MongoDB中,我们有一些文档: { _id: 2, item: "cable", tags: [ "electronics", "supplies" ] } 然后执行addToSet: db.inventory.update( { _id: 2 }, { $addToSet: { tags: { $each: [ "camera", "electronics", "accessories" ] } } } )

我需要使用官方Go MongoDB驱动程序执行
addToSet
操作

在MongoDB中,我们有一些文档:

{ _id: 2, item: "cable", tags: [ "electronics", "supplies" ] }
然后执行
addToSet

db.inventory.update(
   { _id: 2 },
   { $addToSet: { tags: { $each: [ "camera", "electronics", "accessories" ] } } }
)
结果:

{
  _id: 2,
  item: "cable",
  tags: [ "electronics", "supplies", "camera", "accessories" ]
}

$addToSet
是一个更新操作,如果要更新单个文档,可以使用该方法

使用和/或类型描述过滤器和更新文档

例如:

update := bson.M{
    "$addToSet": bson.M{
        "tags": bson.M{"$each": []string{"camera", "electronics", "accessories"}},
    },
}
res, err := c.UpdateOne(ctx, bson.M{"_id": 2}, update)
下面是一个完整的可运行应用程序,它连接到MongoDB服务器并执行上述更新操作:

ctx := context.Background()
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost"))
if err != nil {
    panic(err)
}
defer client.Disconnect(ctx)

c := client.Database("dbname").Collection("inventory")

update := bson.M{
    "$addToSet": bson.M{
        "tags": bson.M{"$each": []string{"camera", "electronics", "accessories"}},
    },
}
res, err := c.UpdateOne(ctx, bson.M{"_id": 2}, update)
if err != nil {
    panic(err)
}
fmt.Printf("%+v", res)

当我不确定哪个字段用户要更新时,该怎么办?e、 g让我们想象一下这是一个out模型
id:123,name:Varun,pwd:qwerty
。一个用户想要更新他们的名字,然后我们将执行答案中定义的操作。但想象一下,下次用户想要更新密码时,我们会怎么做?