私はGoでWebサイトを実行していて、MGOパッケージを使用してMongoDBデータベースに接続しています。Golang MGO - 挿入または更新が正常に動作しない
ユーザーのサインインを処理していますが、func Upsert()
を使用してデータベースに存在するユーザーを更新しようとしています。
Upsert()
(下のコード)を実行すると、2番目の引数のbson.M{}
の現在のフィールドのみを更新するのではなく、すべてのフィールドが置き換えられます。
db.C("users").Upsert(
bson.M{"email": "[email protected]"}, // Which doucment to upsert
bson.M{"displayName": "Johhny"}, // What to replace
)
私が説明しようとしているものの視覚的な例。
既存のデータベース・ドキュメント:
{
"_id" : ObjectId("58e7589bab64da55ebcf5d25"),
"email" : "[email protected]",
"password" : "",
"age": 69,
"displayName" : "Someone!"
}
実行した後:
db.C("users").Upsert(
bson.M{"email": "[email protected]"},
bson.M{"displayName": "My name was updated"},
)
文書は次のようになります。
:私はなるために文書を期待{
"_id" : ObjectId("58e789feab64da55ebcf691c"),
"displayName" : "My name was updated"
}
{
"_id" : ObjectId("58e7589bab64da55ebcf5d25"),
"email" : "[email protected]",
"password" : "",
"age": 69,
"displayName" : "My name was updated" // This should be updated, all others should be left untouched
}
最後に私の質問です。
ドキュメントがすでにMongoDBコレクションに存在する場合、ドキュメントを更新するにはどうすればいいですか?
を言っていますか?選択し、エラーをチェックしてください(存在しない場合は更新/存在する場合は挿入してください)。 – Acidic
あなたは '$ set'演算子を使用する必要があることを理解していないと分かりません。 何かが好きです: ' bson.M {"$ set":bson.M {"displayName": "私の名前が更新されました"}} ' – Zak
テストされた、それは動作します。ありがとうございました! :) – Acidic