UpdateOne, ReplaceOne, FindOneAndReplace - соответствие шаблона, но нет данных обновления - PullRequest
0 голосов
/ 03 июля 2019

Я использую адаптер Mongo Go: github.com/mongodb/mongo-go-driver/

Я пробую разные шаблоны, но ни один из них не работает для меня.

// ref struct

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/

1 Ответ

0 голосов
/ 04 июля 2019

Спасибо @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: «Имя», а не bosn: «Имя». Вы можете найти запрос Документы в качестве полезной ссылки (выберите вкладку Перейти, чтобы показать примеры в Go)

С уважением, Ван.

...