UpdateOne,ReplaceOne,FindOneAndReplace-模式匹配,但没有更新数据

时间:2019-07-03 17:48:17

标签: mongodb go mongo-go

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

我正在尝试不同的模式,但是没有一个对我有用。

// ref结构

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

// ref代码,它正在更新_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/

1 个答案:

答案 0 :(得分: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”。您可能会发现查询   文档作为有用的参考(选择“转到”标签以显示示例   去)

     

问候,万。