0

我正在使用 Mongo Go 适配器:github.com/mongodb/mongo-go-driver/

我正在尝试不同的模式,但它们都不适合我。

//引用结构

type userbase struct {
    Name  string `bosn:"Name"`
    Coins int    `bson:"Coins"`
}

//参考代码,它正在更新_id,但不更新值

filter := bson.M{"name": "Dinamis"}
update := bson.D{{"$inc", bson.M{"Coins": 1}}}
db := Client.Database("Nothing").Collection("dataUser")
db.UpdateOne(context.Background(), filter, update)

//更新我也使用过的过滤器

update := bson.D{{"$inc", bson.D{{"Coins", 1},}},}

//也尝试了简单的方法

update := &userbase{name, amount} //should i try *userbase{} ?

//我也试过了

ReplaceOne() 
FindOneAndReplace()
FindOneAndUpdate()

很难深入挖掘实际文档的运气:https ://docs.mongodb.com/ecosystem/drivers/go/

4

1 回答 1

0

感谢@Wan Bachtiar 在官方 MongoDB-go-adapter 组中回答这个问题。

默认情况下,MongoDB 中的查询对字段名称区分大小写。在您的结构中,您将字段定义为名称,但在您的过滤器中指定名称。这将导致没有与更新操作的查询谓词匹配的文档。例如,如果您有如下文件:

{ "_id": ObjectId("..."), "Name": "Dinamis", "Coins": 1 }

您可以使用以下代码段执行更新以增加硬币的数量:

collection := client.Database("Nothing").Collection("dataUser")
filter := bson.M{"Name": "Dinamis"}
update := bson.D{{"$inc", bson.M{"Coins": 1}}}
result, err := collection.UpdateOne(context.TODO(), filter, update)

另外,请注意,您的结构中的 bson 标记有错字。它应该是 bson:"Name" 而不是 bosn:"Name"。您可能会发现查询文档是一个有用的参考(选择 Go 选项卡以显示 Go 中的示例)

问候,万。

于 2019-07-04T09:18:41.190 回答